2016-03-28 18 views
2

Ich habe eine xml wie diese,XSLT - identifizieren Knoten durch einen anderen Knoten gefolgt

<doc> 
    <p>para<x>para</x>para<x>para</x>para</p> 
    <p>para<x>para</x><x>para</x>para</p> 
</doc> 

Ich brauche ein ‚‘ zwischen <x> Knoten hinzuzufügen, wenn einige <x> nacheinander platziert (<x> von einem anderen <x> Knoten gefolgt) .

so zum obigen Beispiel XML, sollte eine Ausgabe, sein

<doc> 
    <p>para<x>para</x>para<x>para</x>para</p> 
    <p>para<x>para</x>,<x>para</x>para</p> 
</doc> 

I versucht, ein XSL-Vorlage fo sukzessiven <x> identifizieren zu schreiben, zur Kenntnis genommen und addiert die '', wie folgt,

<xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="x[following-sibling::*[1][self::x]]"> 
     <x> 
      <xsl:apply-templates/> 
     </x> 
     <xsl:text>,</xsl:text> 
    </xsl:template> 

aber es fügt den beiden Szenarien das ',' hinzu. (<x> gefolgt von einem anderen <x> Knoten und <x> gefolgt von Text)

Irgendeine Idee, diesen xpath zu korrigieren?

Antwort

3

Durch die Verwendung überprüfen following-sibling::*[1] die XPath nur für die nächsteElement folgende Geschwister, nicht unter Berücksichtigung Textknoten. Verwenden Sie stattdessen following-sibling::node()[1]:

<xsl:template match="x[following-sibling::node()[1][self::x]]"> 
    <x> 
     <xsl:apply-templates/> 
    </x> 
    <xsl:text>,</xsl:text> 
</xsl:template> 
Verwandte Themen