xsl-list
[Top] [All Lists]

RE: Concatenating multiple input documents into a single node-set

2004-05-12 08:51:00

I want to concatenate all of the nodes in a RELAX-NG schema (which is 
comprised of multiple included files) into a single node-set. 
 I've tried 
something like this:

<xsl:variable name="collection">
   <xsl:for-each select="//rng:include">
      <xsl:copy-of select="document(@href)" />
   </xsl:for-each>
</xsl:variable>

but I only get one node in the resulting variable.  

The above should work. It should give you a result tree fragment. When you
convert this to a node-set using the xx:node-set() extension (or implicitly,
in XSLT 2.0), the value of the variable is a document node whose children
should include all the document elements of the selected documents. So the
value of the variable is indeed one node.

What are you actually doing with this data? I suspect you don't need to copy
the nodes at all, only to select them.

In fact you don't need the for-each, because the document() function can
process multiple URIs in a single call. I suspect that all you need is:

<xsl:variable name="collection" select="document(//rng:include/@href)"/>

Michael Kay