[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: How to use xsl:key to get all values?
Hi Di, I think that you're trying to focus the key to get back only those nodes returned by the key that are also descendants of the current node. In other words, you are iterating over the CC elements, and want to find those EE elements that are descendants of that CC element and that have 'a1' as the value of their 'aField' attribute. As Mike has pointed out, you can find only those under a particular element by including an identifier for that element in the key value, so you could do: <xsl:key name="key-name" match="EE" use="concat(generate-id(ancestor::CC), ':', @aField)" /> <xsl:template match="AA/BB"> <xsl:for-each select="CC"> <xsl:variable name="child" select="key('key-name', concat(generate-id(), ':a1')" /> <xsl:value-of select="$child/@value" /> </xsl:for-each> </xsl:template> Another option is to retrieve all the EE elements with that particular aField using the key, and then filter them to find only those who have the current CC element as an ancestor: <xsl:key name="key-name" match="EE" use="@aField)" /> <xsl:template match="AA/BB"> <xsl:for-each select="CC"> <xsl:variable name="child" select="key('key-name', 'a1') [count(ancestor::CC | current()) = 1]" /> <xsl:value-of select="$child/@value" /> </xsl:for-each> </xsl:template> [Note: The predicate on the key there is a way of testing whether two nodes are the same using set logic, sometimes known as the "Kaysian Intersection" method. You could equally use: generate-id(ancestor::CC) = generate-id(current()) if you prefer.] Which of these two options gives better performance depends on the structure of your source. If you're worried about performance, then you should try both, time them and see what difference it makes. I hope that helps, 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
|