On 2 February 2016 at 20:57, Matthew Stoeffler matthew.stoeffler@xxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Lets say Ibm processing products that can have multiple types of a
certain
> node distinguished by value, of which I want only one in my result, and I
> have a precedence order by type of those nodes that shoudl determine which
> one I get. So, if the child of product Ibm interested in is price
currency
> and my product had
>
>
>
> <product>
>
> b&.
>
>
>
> <price>
>
> <amount>25.00</amount>
>
> <currency>FR</currency>
>
> </price>
>
>
>
> <price>
>
> <amount>20.00</amount>
>
> <currency>US</currency>
>
> </price>
>
>
>
> <price>
>
> <amount>30.00</amount>
>
> <currency>CA</currency>
>
> </price>
>
>
>
> </product>
>
>
>
> And my preference is to take the only one price in the order 1., US, 2.
> CA, 3.FR.
>
>
>
> In context product, if I say
>
>
>
> <xsl:apply-templates
>
select=b(price[currency=bUSb],price[currency=bCAb],price[currency=b
FRb])[1]b/>
>
>
>
> I get the FR price because itbs first in doc order, but my expression was
> meant to say process nodes in this sequence order, taking the first one, in
> the sequence, not in the doc order of the input tree.
>
> No you should get the US one. if you execute
<xsl:stylesheet version="2.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">
<xsl:template match="product">
<xsl:copy-of
select="(price[currency='US'],price[currency='CA'],price[currency='FR'])[1]"/
>
</xsl:template>
</xsl:stylesheet>
on the xml you posted then you get
<price>
<amount>20.00</amount>
<currency>US</currency>
</price>
Does you real code have a path step /xxx after the comma expression? (that
would sort into document order)
David
>
>
> I thought the above instruction would be a short cut to achieving this,
> but it doesnbt work. Is there a concise way to express the kind of
> precedence I want?
>
>
>
> Thanks.
>
>
>
>
>
>
--
http://dpcarlisle.blogspot.com/
|