xsl-list
[Top] [All Lists]

Re: including external XML file and process whole new tree

2004-12-03 12:09:13
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>