|
Subject: Re: [xsl] Grouping and Insertion From: Florent Georges <darkman_spam@xxxxxxxx> Date: Mon, 20 Nov 2006 12:00:39 +0100 (CET) |
Jeff Sese wrote:
Hi
> I have a source xml that needs to be inserted with new
> contents from a separate xml file.
Personnally, I'd do something like this, if I correctly
understood your requirements:
[11] ~/xslt/tests$ cat airplaine.xml
<root>
<entry id="1" type="T" n="1">
<aaa/>
</entry>
<entry id="1" type="T" n="1" n-mod="a">
<bbb/>
</entry>
<entry id="1" type="T" n="2">
<ccc/>
</entry>
<entry id="1" type="T" n="3">
<ddd/>
</entry>
<entry id="1" type="T" n="4">
<eee/>
</entry>
<entry id="1" type="T" n="5">
<fff/>
</entry>
</root>
[12] ~/xslt/tests$ cat airplaine-1.xml
<root>
<entry id="1" type="T" n="1"/>(<xref target="1" type="T"
n="1">1</xref>) <AAA/><entry id="1" type="T" n="1"
n-mod="a"/>(<xref target="1" type="T" n="1a">1a</xref>)
<BBB/><entry
id="1" type="T" n="1-5"/>(<xref target="1" type="T"
n="1-5">1-5</xref>) <CCC/><entry id="1" type="T"
n="2"/>(<xref target="1" type="T" n="2">2</xref>) <DDD/>
</root>
[13] ~/xslt/tests$ cat airplaine.xsl
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:airplaine.xsl"
exclude-result-prefixes="xs my">
<xsl:param name="new.entry.file" as="xs:anyURI"
select="xs:anyURI('airplaine-1.xml')"/>
<xsl:variable name="new.entry.doc" as="document-node()"
select="document($new.entry.file)"/>
<xsl:variable name="my:id-separator" as="xs:string"
select="'.@@.'"/>
<xsl:function name="my:id" as="xs:string">
<xsl:param name="id" as="xs:string"/>
<xsl:param name="type" as="xs:string"/>
<xsl:param name="n" as="xs:string"/>
<xsl:param name="n-mod" as="xs:string?"/>
<xsl:sequence select="
string-join(
($id, $type, $n, $n-mod),
$my:id-separator
)"/>
</xsl:function>
<xsl:key name="xref" match="xref"
use="my:id(@target, @type, @n, @n-mod)"/>
<xsl:function name="my:xref-from-entry">
<xsl:param name="entry" as="element(entry)"/>
<xsl:variable name="id" as="xs:string" select="
$entry/my:id(@id, @type, @n, @n-mod)"/>
<xsl:sequence select="$new.entry.doc/key('xref', $id)"/>
</xsl:function>
<xsl:template match="entry">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:variable name="xref" select="
my:xref-from-entry(.)"/>
<xsl:if test="$xref">
<new.entry>
<xsl:apply-templates select="
$xref/following-sibling::*[1]"/>
</new.entry>
</xsl:if>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
[14] ~/xslt/tests$ saxon airplaine.xml airplaine.xsl
<?xml version="1.0" encoding="UTF-8"?><root>
<entry id="1" type="T" n="1">
<aaa/>
</entry><new.entry><AAA/></new.entry>
<entry id="1" type="T" n="1" n-mod="a">
<bbb/>
</entry>
<entry id="1" type="T" n="2">
<ccc/>
</entry><new.entry><DDD/></new.entry>
<entry id="1" type="T" n="3">
<ddd/>
</entry>
<entry id="1" type="T" n="4">
<eee/>
</entry>
<entry id="1" type="T" n="5">
<fff/>
</entry>
</root>
[15] ~/xslt/tests$
Regards,
--drkm
___________________________________________________________________________
Dicouvrez une nouvelle fagon d'obtenir des riponses ` toutes vos questions !
Profitez des connaissances, des opinions et des expiriences des internautes sur Yahoo! Questions/Riponses
http://fr.answers.yahoo.com
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Grouping and Insertion, Jeff Sese | Thread | [xsl] How can I select only unique , Robert Eaton |
| [xsl] [ANN] oXygen XML Editor 8.0, George Cristian Bina | Date | Re: [xsl] writing out of the curren, Andrew Welch |
| Month |