Subject: [xsl] Keying over added attributes in temporary tree From: Tim Lebo <timleboxslt@xxxxxxxxx> Date: Fri, 27 Jan 2006 10:28:11 -0500 |
"A key can be used to select nodes in any document, not just the principle document. This includes a document constructed as a temporary tree." - Kay XSLT2.0 3ed, pg 334 I am trying to create a key of the elements in a temporary tree. This temporary tree is the result of a "first phase" processing that adds a new attribute to the element. I would assume that the keys are created before starting the "/" template. The xsl:key element is not allowed in a template, so that can't force the re-indexing for the key. Two questions: 1) Is the xsl:variable "objects-with-new" considered a "temporary tree"? 2) Is it possible to access the "object" elements in $objects-with-new via a key, where the @use is an attribute that was added after parsing the input document? Regards, Tim Lebo Input: <?xml version="1.0" encoding="UTF-8"?> <root> <object id="a"> </object> <object id="b"> </object> <object id="c"> </object> </root> XSLT 2.0 (saxon8b): 1 <?xml version="1.0"?> 2 <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 3 <xsl:output method="xml" indent="yes"/> 4 5 <xsl:key name="objects-by-id" match="object" use="@id"/> 6 <xsl:key name="objects-by-new" match="object" use="@new"/> 7 8 <xsl:template match="/"> 9 <xsl:comment>Successful attempt to access input nodes by key</xsl:comment> 10 <xsl:copy-of select="key('objects-by-id','b')"/> 11 12 <xsl:variable name="objects-with-new"> 13 <xsl:apply-templates select="//object" mode="addnew"/> 14 </xsl:variable> 15 16 <xsl:comment>Objects with added attribute</xsl:comment> 17 <xsl:copy-of select="$objects-with-new"/> 18 19 <xsl:comment>Successful attempt to access by more expensive xpath expression</xsl:comment> 20 <xsl:copy-of select="$objects-with-new//object[@new=2]"/> 21 22 <xsl:comment>Failed attempt to access keyed by new attribute</xsl:comment> 23 <xsl:copy-of select="key('objects-by-new','2')"/> 24 </xsl:template> 25 26 <xsl:template match="object" mode="addnew"> 27 <xsl:copy> 28 <xsl:copy-of select="@*"/> 29 <xsl:attribute name="new"> 30 <xsl:number/> 31 </xsl:attribute> 32 <xsl:apply-templates/> 33 </xsl:copy> 34 </xsl:template> 35 36 </xsl:transform> Output: <?xml version="1.0" encoding="UTF-8"?> <!--Successful attempt to access input nodes by key--> <object id="b"></object> <!--Objects with added attribute--> <object id="a" new="1"></object> <object id="b" new="2"></object> <object id="c" new="3"> </object> <!--Successful attempt to access by more expensive xpath expression--> <object id="b" new="2"></object> <!--Failed attempt to access keyed by new attribute--> THERE IS NO ELEMENT HERE, BUT "<object id="b" new="2"></object>" IS DESIRED
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Sorting with partial stri, Paul Delange | Thread | Re: [xsl] Keying over added attribu, David Carlisle |
Re: [xsl] Sorting with partial stri, David Carlisle | Date | Re: [xsl] Sorting with partial stri, Martin Gadbois |
Month |