<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'BizTalk', 'XSLT', and 'Distinct'</title><link>http://bloggingabout.net/search/SearchResults.aspx?a=1&amp;o=DateDescending&amp;tag=BizTalk,XSLT,Distinct&amp;orTags=0</link><description>Search results matching tags 'BizTalk', 'XSLT', and 'Distinct'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>XSLT Distinct another way to determine distinct in XSLT 1.0</title><link>http://bloggingabout.net/blogs/wellink/archive/2011/02/17/xslt-distinct-onother-way-to-determine-distinct-in-xslt-1-0.aspx</link><pubDate>Thu, 17 Feb 2011 09:26:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:484830</guid><dc:creator>Patrick Wellink</dc:creator><description>&lt;p&gt;I had a requirement to map a buyer only if it was the same buyer throughout the entire document.&lt;br /&gt;The reason for this was that in the source document the buyer was defined in a sub sub sub node of a document and in the destination it occurred only once.&lt;br /&gt;So I ended up with several choices.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only map the first buyer&lt;/li&gt;
&lt;li&gt;Don&amp;#39;t map&lt;/li&gt;
&lt;li&gt;Only map if they were the same throughout the entire document&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For sure the first option would be a bad thing.&lt;br /&gt;The second option would work for all parties involved (it&amp;#39;s an optional element in the output of the map) but the parties really want their buyer information if it&amp;#39;s there.&lt;br /&gt;The third option seemed the best solution. I quickly googled on XSLT and distinct and there were some results. So&amp;nbsp;I told the customer implementing a distinct wouldn&amp;#39;t be too hard. (it already existed in XSLT).&lt;br /&gt;&lt;em&gt;(I wish I looked a bit harder, cause then&amp;nbsp;I would have seen that the distinct function of XSLT comes with XSLT 2.0 and sadly BizTalk is still using XSLT1.0)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After some thinking I got the following solution for this problem.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Perform a count of the number of buyers in a document&lt;/li&gt;
&lt;li&gt;Get the first buyer (buyer is mandatory in the input document)&lt;/li&gt;
&lt;li&gt;Perform a count of the numbers of buyers where buyer != buyer found in step2&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the number in step 3 is 0 then we know all the buyers are the same. Below is the XSLT I used to perform this different distinct approach.&lt;/p&gt;
&lt;p&gt;&amp;lt;xsl:template name=&amp;quot;Buyerparty_DocTemplate&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;xsl:param name=&amp;quot;var1&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;xsl:param name=&amp;quot;var2&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;xsl:param name=&amp;quot;dbg&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;xsl:variable name=&amp;quot;buyers&amp;quot; select=&amp;quot;count(/s0:Request/GeleverdePartij/LeveringsBericht/Levering[*]/Ladingdrager[*]/Goederen[*]/Koper/kop_gln)&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;xsl:variable name=&amp;quot;firstBuyer&amp;quot; select=&amp;quot;/s0:Request/GeleverdePartij/LeveringsBericht/Levering[1]/Ladingdrager[1]/Goederen[1]/Koper/kop_gln&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;xsl:variable name=&amp;quot;otherBuyers&amp;quot; select=&amp;quot;count(/s0:Request/GeleverdePartij/LeveringsBericht/Levering[*]/Ladingdrager[*]/Goederen[*]/Koper[not(kop_gln=$firstBuyer)])&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;xsl:if test=&amp;quot;$dbg=1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;BuyerInfo&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;TotalBuyers&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select=&amp;quot;$buyers&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;FirstBuyer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select=&amp;quot;$firstBuyer&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;OtherBuyers&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select=&amp;quot;$otherBuyers&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;xsl:if test=&amp;quot;$otherBuyers=0&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test=&amp;quot;string-length($firstBuyer) &amp;gt; 0&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;BuyerParty&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;PrimaryID&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select=&amp;quot;$firstBuyer&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;schemeID&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select=&amp;quot;$var1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:element name=&amp;quot;schemeAgencyName&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select=&amp;quot;$var2&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;/p&gt;</description></item></channel></rss>