[xsl] document() and fragment

Subject: [xsl] document() and fragment
From: Brian Smith <blsmith@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 16 Dec 2001 23:48:05 -0600
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):

   <package id="a1" name="javax">
       <package id="a2" name="swing">
          <package id="a3" name="text"/>

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")/*
     <xsl:value-of select='@name'/>
     <xsl:if test='position() != last()'>.</xsl:if>

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.


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list

Current Thread