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