<xsl:for-each select="document('myxmldoc.xml')//testing/test">
<xsl:value-of select="."/>
<!-- '.' is the current node reference, i.e. whatever
'test' node you are on in the loop --> </xsl:for-each>
OK, when I first looked at the question I thought a template match was
requested, but it wasn't so I came up with the for-each above. But it made
me wonder, can you match based on external documents? So I whipped up the
following:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:variable name="xmldoc" select="document('default.xml')"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates
select="$xmldoc/testing/test"/>
</body>
</html>
</xsl:template>
<xsl:template match="testing/test">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
Contents of default.xml:
<testing>
<test>1234</test>
<test>1234</test>
<test>1234</test>
<test>1234</test>
</testing>
Now, this works great, I just viewed it in IE since it points to itself just
for quick testing. But my template originally used the same pattern as the
apply-templates element, i.e. "$xmldoc/testing/test", however IE reported
that I could not use $xmldoc ("variables") in a match pattern. I can't embed
the document() call in it's place either, i.e.
"document('default.xml')/testing/test".
Why is that?
It looks like I can write a template for a general element set in the
stylesheet, and the documents called in are somehow merged with the main
document transformed. I'm not grokking exactly how they are merged, and to
confess I never really needed to before. Like I said, this was simply to
satisfy my curiosity, but while answering one question it naturally prompted
two more...
Thanks!
-dave
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list