My bad: "to insert result elements" should be just "to insert elements" -
they will become result elements once your stylesheet does its thing.
JBryant(_at_)s-s-t(_dot_)com
12/03/2004 12:52 PM
Please respond to
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
cc
Subject
Re: [xsl] 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(_at_)email(_dot_)com>
12/03/2004 11:58 AM
Please respond to
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
cc
Subject
[xsl] 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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--