Subject: M.Kay XSLT book, p. 120 Curly braces question From: Gert Bultman <g.w.bultman@xxxxxxxxxxxxxx> Date: Mon, 31 Jul 2000 09:53:26 +0000 |
On page 120 of his XSLT book, Michael Kay describes where the curly braces construct can and cannot be used. In the example at the top of the page he describes a situation where it cannot be used, but fails to give an alternative solution. I am at the moment facing a similar problem, where I would like to use a variable or parameter as part of an XPath expression. However, whereas I can use variables in constructions such as $doc/FeatureSet[$i]/Feature[$j], where $doc is a nodeset generated by <xsl:variable name="doc" select="document(@FeatureFile)"/> I cannot use a construction like $doc//$mypointer, where $mypointer has the value 'FeatureSet[2]/Feature[4]'. (saxon & xt both balk at the second $ sign in the expression) To illustrate my point I'll include my xml and xsl fragments: XML: In my xml file which describes my data, I want to include a reference to the original data that was used in the calculation. Since that data, too, is stored in an XML file, I would ideally store an xpointer in one of the attributes, and use that directly in my XSL stylesheet. Failing to do so, I then started using an additional attribute for storing the counters. These I can use easily in my stylesheet, as the example shows. <EventNode Id='1' FeatureFile='f1.xml' Fid="1.2" FeatureId='FeatureSet[1]/Feature[2]' EventIn='CONT' EventOut='CONT'/> <EventNode Id='2' FeatureFile='f1.xml' Fid="1.1" FeatureId='FeatureSet[1]/Feature[1]' EventIn='CONT' EventOut='CONT'/> XSL: I use the document functiont to retrieve the external document (f1.xml) as a nodeset, and I can then use constructions such as: <xsl:template match="EventNode"> <li> Hello World : <xsl:value-of select="@Id"/> <xsl:value-of select="@EventIn"/> <xsl:value-of select="@EventOut"/> <xsl:variable name="doc" select="document(@FeatureFile)"/> <xsl:apply-templates select="$doc//FeatureSet[1]/Feature[1]"/> </li> </xsl:template> (the rest of the stylesheet of course has appropriate templates for the FeatureSet & Feature tags) or even: <xsl:apply-templates select="$doc/FeatureSet[substring-before($Fid,'.')]/Feature[substring-after($Fid,'.')]"/> However, I would like to be able to use @FeatureId directly: <xsl:apply-templates select="document(@FeatureFile)//{@FeatureId}"/> Or even by catching the xpointer in a variable first and then using a concat: <xsl:variable name="doc" select="document(@FeatureFile)"/> <xsl:variable name="pointer" select="@FeatureId"/> <xsl:variable name="pointertwo" select="concat('$doc','//',@FeatureId)"/> or <xsl:variable name="pointertwo" select="concat('$doc','//',$pointer)"/> <xsl:apply-templates select="$pointertwo"/> ===== Any and all help will be greatly appreciated, Gert Bultman Delft Technical University Computer Graphics Dept. XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: Accessing multiple documents, Kay Michael | Thread | RE: M.Kay XSLT book, p. 120 Curly b, Kay Michael |
Re: xsl attributes - include and im, Tamsin | Date | AW: Passing an URL as a parameter w, Schmitt, Christian |
Month |