xsl-list
[Top] [All Lists]

Re: [xsl] XPath question concerning distinct-values()

2012-08-03 11:02:01
Hi Thorsten,
    Here are few more 2.0 approaches (hopefully, would meet your
requirement) to solve this problem:

1)

  <xsl:template match="/">
        <xsl:variable name="unique-order-nums"
select="distinct-values(pricelist/item/order-number)"/>
        <xsl:variable name="docRoot" select="/"/>
        <xsl:for-each select="$unique-order-nums">
            <xsl:value-of select="current()"/><xsl:text>
</xsl:text><xsl:value-of select="$docRoot/pricelist/item[order-number
= current()][1]/price"/><xsl:text>&#xA;</xsl:text>
        </xsl:for-each>
   </xsl:template>


2)

   <xsl:key name="item-key" match="item" use="order-number"/>
        
   <xsl:template match="/">
         <xsl:variable name="unique-order-nums"
select="distinct-values(pricelist/item/order-number)"/>
         <xsl:variable name="docRoot" select="/"/>
         <xsl:for-each select="$unique-order-nums">
              <xsl:value-of select="current()"/><xsl:text>
</xsl:text><xsl:value-of select="key('item-key', current(),
$docRoot)[1]/price"/><xsl:text>&#xA;</xsl:text>
         </xsl:for-each>
    </xsl:template>


On Fri, Aug 3, 2012 at 4:44 PM, Thorsten <xsl-list(_at_)vw-freaks(_dot_)net> 
wrote:
Hello,

I have a terrible SAP export that looks (simplified) like this:

<pricelist>
   <item>
      <title>Lorem Ipsum Dolor Sit Amet</title>
      <order-number>XY7020280901</order-number>
      <price>12.00</price>
      <unit>50</unit>
   </item>
   <item>
      <title>Some Title</title>
      <order-number>XY9010200901</order-number>
      <price>19.00</price>
      <unit>50</unit>
   </item>
   <item>
      <title>The Same Item With A Different Title</title>
      <order-number>XY9010200901</order-number>
      <price>19.00</price>
      <unit>50</unit>
   </item>
   <item>
      <title>Lorem Ipsum Dolor</title>
      <order-number>XY7010220201</order-number>
      <price>18.00</price>
      <unit>50</unit>
   </item>
</pricelist>

I want to select each <item> with different <order-number>. Simply
distinct-values(/pricelist/item) doesn't work because the <title> of item[2] 
and
item[3] are different.

My output should look like this:
XY7020280901  12.00
XY9010200901  19.00
XY7010220201  18.00

I'm using XSLT2.0 with Saxon 9.2 PE.

Any ideas?

Many thanks in advance.

Kind regards
Thorsten



-- 
Regards,
Mukul Gandhi

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--