Mit XSL 2.0 geht die funktion jetzt, aber dein Code liefert nicht das gewünschte Resultat.
Hier das XSL:
Der Output ist
D.h. Text4 und Text5 erscheinen dennoch doppelt und Text3 wird gar nicht erst
gematcht.
Könntest du noch mal drüber schauen?
Danke!
Hier das XSL:
Code:
<xsl:param name="start" select="'THIS'"/> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="k1" match="*[@Name]" use="@Name"/> <xsl:template match="/"> <xsl:variable name="rtf-references"> <xsl:apply-templates select="//Cat[@Name = $start]"/> </xsl:variable> <xsl:for-each select=" $rtf-references/*[generate-id() = generate-id(key('k1', @Name)[2] )]"> <xsl:copy-of select="."/> </xsl:for-each> </xsl:template> <xsl:template match="*[@Name]"> <xsl:copy-of select="."/> <xsl:apply-templates select="descendant::*[starts-with(local-name(), 'p')]" /> </xsl:template> <xsl:template match="*[@Name]/*[starts-with(local-name(), 'p')]"> <xsl:if test="not(preceding::*[@Name=local-name()])"> <xsl:apply-templates select="key('k1', .)"/> </xsl:if> </xsl:template>
Code:
<Cat Name="THIS"> <a>egal</a> <b>egal</b> <pA>Text1</pA> <pB>Text2</pB> <aaa> <dd> <pC>Text3</pC> </dd> </aaa> </Cat> <hier1 Name="Text1"> <u1>dies1</u1> <u2>dies2</u2> <pD>Text4</pD> </hier1> <hier4 Name="Text4"> <pE>Text5</pE> </hier4> <hier5 Name="Text5"> <u1>dies1</u1> <u2>dies2</u2> </hier5> <hier2 Name="Text2" Co="ssss"> <u1>dies1></u1> <u2>dies2></u2> <pG>Text4</pG> </hier2> <hier4 Name="Text4"> <pE>Text5</pE> </hier4> <hier5 Name="Text5"> <u1>dies1</u1> <u2>dies2</u2> </hier5>
gematcht.
Könntest du noch mal drüber schauen?
Danke!
Comment