|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: basic xsl question
Hi Matts,
> Stylesheet like this:
>
> <xsl:for-each select="root/orders/order">
> <!-- the person is '/root/order/person_id' in root/persons/person/id
> -->
> <xsl:value-of select="root/persons/person[id=person_id]/name" />
> </xsl:for-each>
>
> The problem i'am having is related to the value-of row. How do i
> write that so it works?
You have two problems. First, you need to add a / before "root" in the
xsl:value-of, because you want to search from the top of the document,
not from the order that you're currently in. Second, as you've
identified, you need to refer to the person_id of the order; you can
do this by getting the *current* node (the order element that you're
processing) using the current() function, as follows:
<xsl:for-each select="root/orders/order">
<xsl:value-of
select="/root/persons/person[id = current()/person_id]/name" />
</xsl:for-each>
or by assigning the person_id to a variable and then referring to
that:
<xsl:for-each select="root/orders/order">
<xsl:variable name="id" select="person_id" />
<xsl:value-of select="/root/persons/person[id = $id]/name" />
</xsl:for-each>
Alternatively, you could use keys here. Index each person by their id
using an xsl:key declaration:
<xsl:key name="persons" match="person" use="id" />
and then retrieve them using the key() function:
<xsl:for-each select="root/orders/order">
<xsl:value-of select="key('persons', person_id)/name" />
</xsl:for-each>
This is likely to be quicker if you have lots of orders and/or lots of
person elements.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








