RE: [xsl] External XML Doc help

Subject: RE: [xsl] External XML Doc help
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Mon, 17 Mar 2003 16:57:04 -0500
[ Karl Stubsjoen]

> <xsl:template match="myexternalxml">
>     <xsl:copy-of select="document('myxmldoc.xml)//testint/test"/>
> </xsl:template>
> 
> 
> This works great... spits out all the xml in the document 
> "myxmldoc.xml".
> However, I need to loop through a nodelist within this 
> document and I'm not
> sure how to set up my templates to do this.  How would I, 
> lets say, loop
> through all test nodes in the following "myxmldoc" xml document:
> 
> <testing>
>     <test>1234</test>
>     <test>1234</test>
>     <test>1234</test>
>     <test>1234</test>
> </testing>
> 

document()/ gives you the root of your external xml file.  You have to
do something that changes the context node to that document, then you
can do anything you like with it.

For example -

<xsl:template match="myexternalxml">
    <xsl:for-each select="document('myxmldoc.xml')/testing">
	<xsl:apply-templates select='test'/>
    </xsl:for-each>
</xsl:template>

Here, xsl:for-each changes the context to the (one and only) "testing"
node in the external file.

Or - 

<xsl:variable name='tests'
select="document('myxmldoc.xml')/testing/test"/>
<!-- then, within a template, -->
<xsl:apply-templates select='$tests'/>
....
<!-- outside the above template: -->
<xsl:template match='test'>
	... do something  here ...
</xsl:template>

Here, the xsl:apply-templates changes the context for you.  If you could
have "test" elements in your main source document and you do not want
the same template to process "test" elements from both documents, then
use template modes -

<xsl:variable name='tests'
select="document('myxmldoc.xml')/testing/test"/>
<!-- then, within a template, -->
<xsl:apply-templates select='$tests' mode='externals'/>
....
<!-- outside the above template: -->
<xsl:template match='test' mode='externals'>
	... do something  here ...
</xsl:template>

Cheers,

Tom P

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


Current Thread