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

Re: including external XML file and process whole new

Subject: Re: including external XML file and process whole new tree
From: JBryant@xxxxxxxxx
Date: Fri, 3 Dec 2004 13:09:13 -0600
include external xml file
My bad: "to insert result elements" should be just "to insert elements" - 
they will become result elements once your stylesheet does its thing.





JBryant@xxxxxxxxx 
12/03/2004 12:52 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
Re:  including external XML file and process whole new tree






I think you may be making things overly complex (or perhaps I 
misunderstand your goals). You can use apply-templates to insert result 
elements from another document into the current result tree. So, the 
following would work:

<xsl:apply-templates select="document(//otherfile/@name)//subelem"/>

Then toss the for-each and have a template for match="subelem".

You could replace //subelem with the full path from the root of the 
inserted document to subelem. In your example, that would be 
/parts/subelem. I assume that your example is a fragment of a much bigger 
document, in which you might not know the full path, so // will do for 
that case.

The following stylesheet works on Saxon

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <xsl:apply-templates select="/myelem/subelem"/>
    <xsl:apply-templates select="document('test2.xml')/parts/subelem"/>
  </xsl:template>

  <xsl:template match="subelem">
    <xsl:value-of select="@aaa"/>
  </xsl:template>

</xsl:stylesheet>

A couple caveats: In this case, the elements appear in sorted order 
because of the order of the elements in the file and the order of the 
apply-template statements. If you can't control the order of things in the 

input documents, you'll need to add sorting to the stylesheet. Also, with 
Saxon (8.1.1), I got all the output on one line. That's not a problem if 
you are wrapping your output in tags (HTML or XML), but it's a problem if 
you are relying on line breaks. As you can see, I also hardcoded the 
second file's name, just to save myself a bit of time.

HTH

Jay Bryant
Bryant Communication Services






"Matt Adams" <mattad@xxxxxxxxx> 
12/03/2004 11:58 AM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
 including external XML file and process whole new tree






How can I insert an external xml file into a given first xml file
and start then processing the target xml as base for xpath expressions?
Seems difficult question but isn't. Assume the following sample:

first.xml:
<myelem>
  <subelem aaa="1" />
  <subelem aaa="2" />
  <otherfile name="second.xml" />
</myelem>

second.xml:
<parts>
 <subelem aaa="3" />
 <subelem aaa="4" />
</parts>

mysample.xslt:
....
<xsl:replaceotherfileby select="document(//otherfile/@name)" />
<!-- temporary tree in memory should be now:
<myelem>
  <subelem aaa="1" />
  <subelem aaa="2" />
  <parts>
    <subelem aaa="3" />
    <subelem aaa="4" />
  </parts>
</myelem>
-->
<xsl:for-each ... select="//subelem">
  <xsl:value-of select="./@aaa" />
</xsl:for-each>

output:
1
2
3
4

How do I code the function here called "replaceotherfileby"?

Second related question: Suppose in first.xml and second.xml
different prefixes are used for the same namespace.
Is your solution a pure textual replacement or are
the prefixes adjusted according to the refering common
namespace as well?

Thank you
Matt











-- 
___________________________________________________________
Sign-up for Ads Free at Mail.com
http://promo.mail.com/adsfreejump.htm

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.