[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: External XML Doc help

Subject: RE: External XML Doc help
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Mon, 17 Mar 2003 16:57:04 -0500
xsl external document
[ 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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.