[2.0] The doc() and doc-available() Functions
XSLT 2.0 provides a new function, doc()
, that is very similar to the
document()
function, but that is
simpler in a couple of ways. First of all, the document()
function can take a node-set or
sequence as its first argument, whereas doc()
takes a single string. In our
earlier stylesheets, we created a variable containing all of the nodes
from all of the documents referenced in our list of purchase
orders:
<xsl:variable name="purchase-orders" select="document(/report/po/@filename)/purchase-order"/>
This returns a sequence of purchase-order
nodes, each of which has the
structure defined in the purchase order. We can use the variable
$purchase-orders
in an <xsl:for-each>
or <xsl:for-each-group>
element. A
stylesheet that contains this markup raises an error if there is more
than one <po>
element in the
source document:
<!-- This doesn't work with our sample document --> <xsl:variable name="purchase-orders" select="doc(/report/po/@filename)/purchase-order"/>
If we want to use the doc()
function, there are several things we could do. We could specify a
particular <po>
element:
<xsl:variable name="purchase-orders" select="doc(/report/po[2]/@filename)/purchase-order"/>
A more practical solution would be to put the doc()
function into an <xsl:for-each>
element:
<xsl:for-each select="/report/po"> <xsl:variable name="purchase-orders" select="doc(@filename)/purchase-order"/> </xsl:for-each>
We could also change our input document so that it has only a single ...
Get XSLT, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.