{"id":4453,"date":"2008-04-25T14:19:00","date_gmt":"2008-04-25T14:19:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2008\/04\/25\/vb-xml-cookbook-recipe-3-identity-transforms-doug-rothaus\/"},"modified":"2024-07-05T14:25:53","modified_gmt":"2024-07-05T21:25:53","slug":"vb-xml-cookbook-recipe-3-identity-transforms-doug-rothaus","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/vb-xml-cookbook-recipe-3-identity-transforms-doug-rothaus\/","title":{"rendered":"VB XML Cookbook, Recipe 3: Identity Transforms (Doug Rothaus)"},"content":{"rendered":"<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">An identity transform in XSLT does just what the name implies: replace the identity of an element or attribute with a new identity. Identity transforms are especially critical when dealing with XML markup that is less rigid in its structure. Consider a documentation structure for news articles. Whenever a title is referred to within an article, it is highlighted with italics. However, the XML schema for the article does not specify italics, it specifies that the term is some type of title so that different transforms can handle the term in their own fashion. When you transform XML such as this into a readable format, such as HTML, you need to preserve the structure of the text around the highlighted term so that the original intent remains intact. That is&hellip;<\/font><\/p>\n<p class=\"MsoNormal\"><span>&lt;Paragraph sequenceID=&rdquo;1&rdquo;&gt;<\/span><span>This week a remastered version of the movie &lt;title type=&rdquo;movie&rdquo;&gt;Raider&rsquo;s of the Lost Ark&lt;\/title&gt; was released.&lt;\/Paragraph&gt;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">becomes&hellip;<\/font><\/p>\n<p class=\"MsoNormal\"><span>&lt;p&gt;This week a remastered version of the movie &lt;i&gt;Raider&rsquo;s of the Lost Ark&lt;\/i&gt; was released.&lt;\/p&gt;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">In a browser you see&hellip;<\/font><\/p>\n<p class=\"MsoNormal\"><span>This week a remastered version of the movie <i>Raider&rsquo;s of the Lost Ark<\/i> was released.<\/span><span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">(Note: I have no idea if they are really releasing a remastered version of Raider&rsquo;s of the Lost Ark, I just typed the first thing that popped into my head).<\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">You can perform an identity transform using Visual Basic and XML Literals by combining <\/font><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/bb384769.aspx\"><font face=\"Calibri\" color=\"#0000ff\" size=\"3\">XML Axis properties<\/font><\/a><font face=\"Calibri\" size=\"3\"> and the <\/font><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/system.xml.linq.xnode.replacewith.aspx\"><font face=\"Calibri\" color=\"#0000ff\" size=\"3\">ReplaceWith<\/font><\/a><font face=\"Calibri\" size=\"3\"> method for LINQ to XML objects.<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Let&rsquo;s look at a more complete example. In the AdventureWorks contacts source document that we used in previous recipes (you can download the XML document and related schemas from the <\/font><a href=\"http:\/\/blogs.msdn.com\/vbteam\/archive\/2008\/02\/21\/vb-xml-cookbook-recipe-1-xml-transformations-using-xml-literals-replacing-xsl-for-each-doug-rothaus.aspx\"><font face=\"Calibri\" color=\"#0000ff\" size=\"3\">Recipe 1<\/font><\/a><font face=\"Calibri\" size=\"3\"> post), there is an <\/font><span>&lt;<span>AdditionalContactInfo&gt;<\/span><\/span><font face=\"Calibri\" size=\"3\"> element that contains information about the contact such as phone numbers, shipping and billing addresses, and so on. To keep things simple, we&rsquo;ll just look at the <\/font><span>&lt;eMail&gt;<\/span><font face=\"Calibri\" size=\"3\"> element. The <\/font><span>&lt;eMail&gt;<\/span><font face=\"Calibri\" size=\"3\"> element can show up in a number of places in the contents of the <\/font><span>&lt;AdditionalContactInfo&gt;<\/span><font face=\"Calibri\" size=\"3\"> element. As a result, you can use the <\/font><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/bb384876.aspx\"><font face=\"Calibri\" color=\"#0000ff\" size=\"3\">XML Descendant axis property<\/font><\/a><font face=\"Calibri\" size=\"3\"> discussed in <\/font><a href=\"http:\/\/blogs.msdn.com\/vbteam\/archive\/2008\/03\/19\/vb-xml-cookbook-recipe-2-descendants-and-ancestors-doug-rothaus.aspx\"><font face=\"Calibri\" size=\"3\">Recipe 2<\/font><\/a><font face=\"Calibri\" size=\"3\"> to retrieve all of the references to <\/font><span>&lt;eMail&gt;<\/span><font face=\"Calibri\" size=\"3\"> elements. You can then iterate through the query results and call the ReplaceWith method for each <\/font><span>&lt;eMail&gt;<\/span><font face=\"Calibri\" size=\"3\"> element and replace it with a new identity. For example:<\/font><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>Dim<\/span> emails = (<span>From<\/span> email <span>In<\/span> _<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>xmlDoc.<span>&lt;<\/span>Contacts<span>&gt;<\/span>.<span>&lt;<\/span>Contact<span>&gt;<\/span>.<span>&lt;<\/span>aci:AdditionalContactInfo<span>&gt;<\/span>&#8230;<span>&lt;<\/span>act:eMail<span>&gt;<\/span>).ToList()<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>For<\/span> <span>Each<\/span> email <span>In<\/span> emails<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>TransformEmail(email)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>Next<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">In this example, the output is HTML and the <\/font><span>&lt;eMail&gt;<\/span><font face=\"Calibri\" size=\"3\"> element is replaced with an anchor element that specifies a mailto: link to the e-mail address. The previous code snippet passes the <\/font><span>&lt;eMail&gt;<\/span><font face=\"Calibri\" size=\"3\"> <b>XElement<\/b> object to the function <b>TransformEmail<\/b>, which does the actual replacing.<\/font><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>Private<\/span> <span>Sub<\/span> TransformEmail(<span>ByVal<\/span> email <span>As<\/span> XElement)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> emailHtml = <span>&lt;<\/span><span>div<\/span> <span>class<\/span><span>=<\/span><span>&#8220;<\/span><span>Email<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>a<\/span> <span>href<\/span><span>=<\/span><span>&lt;%=<\/span> <span>&#8220;mailto:&#8221;<\/span> &amp; email.<span>&lt;<\/span>act:eMailAddress<span>&gt;<\/span>.Value <span>%&gt;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;%=<\/span> email.<span>&lt;<\/span>act:eMailAddress<span>&gt;<\/span>.Value <span>%&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>a<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>div<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>email.ReplaceWith(emailHtml)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>End<\/span> <span>Sub<\/span><\/span><span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\"><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">A simple class that creates the HTML document using these samples is shown here.<\/font><\/p>\n<p class=\"MsoNormal\"><span lang=\"FR\">Imports<\/span><span lang=\"FR\"> <span>&lt;<\/span><span>xmlns<\/span><span>=<\/span><span>&#8220;<\/span><span>http:\/\/SampleSchema\/AWContacts<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"FR\">Imports<\/span><span lang=\"FR\"> <span>&lt;<\/span><span>xmlns:aci<\/span><span>=<\/span><span>&#8220;<\/span><span>http:\/\/schemas.microsoft.com\/sqlserver\/2004\/07\/adventure-works\/ContactInfo<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"FR\">Imports<\/span><span lang=\"FR\"> <span>&lt;<\/span><span>xmlns:act<\/span><span>=<\/span><span>&#8220;<\/span><span>http:\/\/schemas.microsoft.com\/sqlserver\/2004\/07\/adventure-works\/ContactTypes<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"FR\"><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span>Public Class <\/span><span>Recipe3<span><\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span>Public<\/span><span> <span>Function<\/span> GetContactsHtml(<span>ByVal<\/span> xmlDoc <span>As<\/span> XDocument) <span>As<\/span> XElement<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>&#8216; Replace e-mail address tags with mailto links.<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> emails = (<span>From<\/span> email <span>In<\/span> xmlDoc.<span>&lt;<\/span>Contacts<span>&gt;<\/span>.<span>&lt;<\/span>Contact<span>&gt;<\/span>.<span>&lt;<\/span>aci:AdditionalContactInfo<span>&gt;<\/span>&#8230;<span>&lt;<\/span>act:eMail<span>&gt;<\/span>).ToList()<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>For<\/span> <span>Each<\/span> email <span>In<\/span> emails<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>TransformEmail(email)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Next<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>&#8216; Create the HTML document<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Return<\/span> <span>&lt;<\/span><span>html<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>body<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>table<\/span> <span>border<\/span><span>=<\/span><span>&#8220;<\/span><span>1<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;%=<\/span> <span>From<\/span> contact <span>In<\/span> xmlDoc.<span>&lt;<\/span>Contacts<span>&gt;<\/span>.<span>&lt;<\/span>Contact<span>&gt;<\/span> _<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Select<\/span> <span>&lt;<\/span><span>tr<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>td<\/span> <span>valign<\/span><span>=<\/span><span>&#8220;<\/span><span>top<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;%=<\/span> contact.<span>&lt;<\/span>FirstName<span>&gt;<\/span>.Value &amp; <span>&#8221; &#8220;<\/span> &amp; contact.<span>&lt;<\/span>LastName<span>&gt;<\/span>.Value <span>%&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>td<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>td<\/span> <span>valign<\/span><span>=<\/span><span>&#8220;<\/span><span>top<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;%=<\/span> contact.<span>&lt;<\/span>aci:AdditionalContactInfo<span>&gt;<\/span> <span>%&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>td<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>tr<\/span><span>&gt;<\/span> _<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>%&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>table<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>body<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;\/<\/span><span>html<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>End<\/span> <span>Function<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>Private<\/span> <span>Sub<\/span> TransformEmail(<span>ByVal<\/span> email <span>As<\/span> XElement)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> emailHtml = <span>&lt;<\/span><span>div<\/span> <span>class<\/span><span>=<\/span><span>&#8220;<\/span><span>Email<\/span><span>&#8220;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>a<\/span> <span>href<\/span><span>=<\/span><span>&lt;%=<\/span> <span>&#8220;mailto:&#8221;<\/span> &amp; email.<span>&lt;<\/span>act:eMailAddress<span>&gt;<\/span>.Value <span>%&gt;<\/span><span>&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;%=<\/span> email.<span>&lt;<\/span>act:eMailAddress<span>&gt;<\/span>.Value <span>%&gt;<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/span><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>An identity transform in XSLT does just what the name implies: replace the identity of an element or attribute with a new identity. Identity transforms are especially critical when dealing with XML markup that is less rigid in its structure. Consider a documentation structure for news articles. Whenever a title is referred to within an [&hellip;]<\/p>\n","protected":false},"author":260,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[192,195],"tags":[59,94,117,163,166,185],"class_list":["post-4453","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-visual-basic","tag-doug-rothaus","tag-linqvb9","tag-orcas","tag-vb-xml-cookbook","tag-vb2008","tag-xml"],"acf":[],"blog_post_summary":"<p>An identity transform in XSLT does just what the name implies: replace the identity of an element or attribute with a new identity. Identity transforms are especially critical when dealing with XML markup that is less rigid in its structure. Consider a documentation structure for news articles. Whenever a title is referred to within an [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/4453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/260"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=4453"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/4453\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=4453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=4453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=4453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}