Subject: Re: [xsl] Re: [xsl 1.0] howto merge branches by name From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Wed, 14 Dec 2011 16:18:16 -0500 |
<xsl:template match="suite">
<suite name="{@name}">
<xsl:for-each select="//case">
<xsl:if test="generate-id() = generate-id(key('cases',concat(../@name, '.', @name))[1])">
<xsl:apply-templates select="." />
</xsl:if>
</xsl:for-each>
</suite>
</xsl:template>
t:\ftemp>type adrian.xml <?xml version="1.0" encoding="UTF-8"?> <test> <suite name="A"> <case name="A"> <procedure name="A" /> </case> </suite> <suite name="A"> <case name="A"> <procedure name="B" /> </case> </suite> <suite name="A"> <case name="B"> <procedure name="A" /> </case> </suite> <suite name="C"> <case name="A"> <procedure name="A" /> </case> </suite> <suite name="C"> <case name="A"> <procedure name="B" /> </case> </suite> <suite name="C"> <case name="B"> <procedure name="A" /> </case> </suite> </test>
t:\ftemp>call xslt adrian.xml adrian-modified.xsl <?xml version="1.0" encoding="utf-8"?> <test> <suite name="A"> <case name="A"> <procedure name="A"/> <procedure name="B"/> </case> <case name="B"> <procedure name="A"/> </case> </suite> <suite name="C"> <case name="A"> <procedure name="A"/> <procedure name="B"/> </case> <case name="B"> <procedure name="A"/> </case> </suite> </test> t:\ftemp>call xslt adrian.xml adrian-ken.xsl <?xml version="1.0" encoding="utf-8"?> <test> <suite name="A"> <case name="A"> <procedure name="A"/> <procedure name="B"/> </case> <case name="B"> <procedure name="A"/> </case> </suite> <suite name="C"> <case name="A"> <procedure name="A"/> <procedure name="B"/> </case> <case name="B"> <procedure name="A"/> </case> </suite> </test> t:\ftemp>type adrian-modified.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <xsl:apply-templates /> </xsl:template>
<xsl:key name="suites" match="suite" use="@name" /> <xsl:key name="cases" match="case" use="concat(../@name, '
', @name)" />
<xsl:template match="/"> <xsl:apply-templates /> </xsl:template>
<xsl:template match="test"> <test> <xsl:apply-templates select="suite[generate-id() = generate-id(key('suites',@name)[1])]"/> </test> </xsl:template>
<xsl:template match="suite"> <suite name="{@name}"> <xsl:variable name="suite-name" select="@name"/> <xsl:apply-templates select="//case[generate-id() = generate-id(key('cases',concat($suite-name, '
', @name))[1])]"/> </suite> </xsl:template>
<xsl:template match="case"> <case name="{@name}"> <xsl:copy-of select="key('cases',concat(../@name, '
', @name))/ procedure"/> </case> </xsl:template>
</xsl:stylesheet> t:\ftemp>
-- Contact us for world-wide XML consulting and instructor-led training Free 5-hour video lecture: XSLT/XPath 1.0 & 2.0 http://ude.my/uoui9h Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: [xsl 1.0] howto merge, G. Ken Holman | Thread | [xsl] Using multiple columns based , Struijk, Toon van de |
Re: [xsl] Re: [xsl 1.0] howto merge, G. Ken Holman | Date | [xsl] Using multiple columns based , Struijk, Toon van de |
Month |