[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
|