This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

document() and fragment


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]