Subject: Re: [xsl] document() and fragment From: Oleg Tkachenko <olegt@xxxxxxxxxxxxx> Date: Mon, 17 Dec 2001 11:27:31 +0200 |
Saxon 6.4.4 supports using a fragment identifier (bare name xpointer) with the document function like this: document("doc.xml#text"). This is very handy but it is causing me a problem with the way the resulting node-set is rooted.
Lets say I have this document, doc.xml (assume "id" is an ID attribute):
<root> <package id="a1" name="javax"> <package id="a2" name="swing"> <package id="a3" name="text"/> </package> </package> </root>
Now, lets say I'm processing another document, and I evaluate the expression document("doc.xml#a3"). Saxon will return a node-set with a root node containing the package element with id "a3" ("text"). But, I need to traverse the ancestor:: axis in order to get the fully-qualified name of the package ("javax.swing.text"), such as by doing this:
<xsl:for-each select='document("doc.xml#text")/* /ancestor-or-self::package'> <xsl:value-of select='@name'/> <xsl:if test='position() != last()'>.</xsl:if> </xsl:for-each>
Unfortunately, this doesn't work because the result of "document()" will be rooted at the "a3" node, not at the actual root of the doucment.
Is there any way around this? I wish the document() function behaved in a way that would allow me to access the ancestors and predecessors of the selected element.
What about this: <xsl:for-each select='document("doc.xml")//package[@name="text"] /ancestor-or-self::package'> <xsl:value-of select='@name'/> <xsl:if test='position() != last()'>.</xsl:if> </xsl:for-each>
-- Oleg Tkachenko Multiconn International, Israel
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] document() and fragment, Brian Smith | Thread | RE: [xsl] document() and fragment, Michael Kay |
Re: [xsl] conditional namespaces, ronald heller | Date | RE: [xsl] document() and fragment, Michael Kay |
Month |