Subject: Re: [xsl] basic xsl question From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Tue, 21 Jan 2003 12:16:24 +0000 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] basic xsl question, Matts Isuls | Thread | RE: [xsl] basic xsl question, Jarno . Elovirta |
RE: [xsl] basic xsl question, Jarno . Elovirta | Date | Re: [xsl] basic xsl question, Matts Isuls |
Month |