This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
document() and fragment
- From: Brian Smith <blsmith at blue dot weeg dot uiowa dot edu>
- To: XSL-List at lists dot mulberrytech dot com
- Date: Sun, 16 Dec 2001 23:48:05 -0600
- Subject: [xsl] document() and fragment
- Reply-to: xsl-list at lists dot mulberrytech dot com
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.
Thanks,
Brian
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list