You haven't specified the problem very completely. For example, are
there always exactly two branches to be merged, or can it be any number?
Can you get duplicates only at the top level, or at any level? What
should happen if the dir elements have any attributes other than @name, etc?
I would do it in XSLT 2.0 using a recursive application of
xsl:for-each-group. I wouldn't attempt it in XSLT 1.0 (but then, I
wouldn't attempt anything in XSLT 1.0 unless my life depended on it).
<xsl:template name="g">
<xsl:param name="in" as="element(dir)*"/>
<xsl:for-each-group select="$in" group-by="name()">
<dir name="{(_at_)name}>
<xsl:call-template name="g">
<xsl:with-param name="in" select="current-group()/dir"/>
</
</
</
</
Not tested.
Michael Kay
Saxonica
On 08/07/2010 10:39, Szabo, Patrick (LNG-VIE) wrote:
Hi,
You could try this:
<xsl:template match="dir">
<copy>
<copy-of select="@*">
</copy>
<xsl:if test="following::dir[(_at_)name = current()/@name]">
<xsl:apply-templates select="following::dir[(_at_)name =
current()/@name]/*"/>
</xsl:if>
</xsl:template>
Haven't tested this but the solution should be something like this.
cheers
Patrick Szabo
XSLT-Entwickler
Tel.: +43 (1) 534 52 - 1573
Fax: +43 (1) 534 52 - 146
Patrick(_dot_)Szabo(_at_)lexisnexis(_dot_)at
LexisNexis Verlag ARD Orac GmbH& Co KG
Marxergasse 25, 1030 Wien
FN 8333f, Handelsgericht Wien
http://www.lexisnexis.at/
-----Ursprüngliche Nachricht-----
Von: Mathieu Malaterre [mailto:mathieu(_dot_)malaterre(_at_)gmail(_dot_)com]
Gesendet: Donnerstag, 08. Juli 2010 11:30
An: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Betreff: [xsl] Merging common XML tree
Hi there,
I am trying to find a solution for the following problem. Let's
assume that my input XML tree looks like:
<dirs>
<dir name="A">
<dir name="B">
<file name="C">
</dir>
</dir>
<dir name="A">
<dir name="B">
<file name="D">
</dir>
</dir>
</dirs>
and my target output tree should looks like:
<dirs>
<dir name="A">
<dir name="B">
<file name="C">
<file name="D">
</dir>
</dir>
</dirs>
Basically I am trying to represent a dir/file structure in XML, where
I am not allowed to repeat common subdirectory. What XSL function
could I use to do that (XSTL 1.0 if possible).
Thanks !
--~------------------------------------------------------------------
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>
--~--