|
Subject: [xsl] Follow path in source-xml according to another source-document From: christoph.naber@xxxxxxxxxxx Date: Thu, 22 Nov 2007 17:57:23 +0100 |
Hello list,
I want to follow a path in a given source-document, which is a
"light"-version of another source document.
The used processor is xsltproc, but the stylesheet is intended to run on
Xalan so I have to use XSLT 1.0. The input-file-size will be up to 5 MB.
Example "light" input XML
<root>
<elem1 id="one">
<elem2 id="two">
<elem4 id="three_three" />
</elem2>
<elem3 id="six">
<elem5 id="seven" />
</elem3>
</elem1>
</root>
Example "large" input XML
<root>
<elem1 id="one">
<elem2 id="two">
<elem4 id="three_one" />
<elem4 id="three_two" />
<elem4 id="three_three">
Here is the data of three_three
</elem4>
<elem4 id="three_four" />
</elem2>
<elem3 id="four">
<elem5 id="five" />
</elem3>
<elem3 id="six">
<elem5 id="seven" >
Here is the data of seven
</elem5>
</elem3>
<elem3 id="eight">
<elem5 id="nine" />
</elem3>
</elem1>
</root>
Desired output:
Here is the data of three_three
Here is the data of seven
This is the stylesheet that I managed to write so far. But I have no idea
if this is the XSL-way to perform such a task.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="lightdoc" select="string('light.xml')" />
<xsl:template match="/" >
<xsl:apply-templates select="root" >
<xsl:with-param name="light"
select="document($lightdoc)/root" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="node()" >
<xsl:param name="light" />
<xsl:variable name="large" select="current()" />
<xsl:choose>
<!-- We dont want to match textnodes or
processing-instructions -->
<xsl:when test="count($light/*) > 0" >
<xsl:for-each select="$light/*">
<!-- not sure if I have to use
node-set here -->
<xsl:apply-templates
select="exsl:node-set($large)/node()[@id = current()/@id]" >
<xsl:with-param
name="light" select="current()" />
</xsl:apply-templates>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$large/text()" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Any insight, eg. search items would be appreciated.
Greetings
Christoph Naber
If you are not the addressee, please inform us immediately that you have
received this e-mail by mistake, and delete it. We thank you for your
support.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Re: Getting output from a, Keith Hughes | Thread | Re: [xsl] Follow path in source-xml, Mukul Gandhi |
| Re: [xsl] Issue with repetition of , Mukul Gandhi | Date | [xsl] Re: Getting output from a dro, Keith Hughes |
| Month |