2016-03-28 9 views
1

Schlagen Sie vor, wie das Element 'simplepara' überprüft werden soll. [Template Spiel sollte von 'simplepara' sein, wie unten XSLT gegeben in]Wie überprüft man den unmittelbaren Knoten des Elements ist Text?

XML:

<article> 
<simplepara>Fig 1</simplepara>The text1<simplepara>Fig 2</simplepara><simplepara>Fig 3</simplepara>The text2<simplepara>Fig 4</simplepara><simplepara>Fig 5</simplepara> the text3<simplepara>Fig 5</simplepara> 
</article> 

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
<xsl:template match="@*|node()"> 
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 
</xsl:template> 

<xsl:template match="simplepara"> 
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 
    <xsl:if test="following-sibling::node()[1][text()][normalize-space()!='']"> 
     <xsl:comment select="'Text-Node'"/> 
    </xsl:if> 
</xsl:template> 

</xsl:stylesheet> 

Pflicht Ergebnis:

<?xml version="1.0" encoding="UTF-8"?><article> 
<simplepara>Fig 1</simplepara><!--Text-Node-->The text1<simplepara>Fig 2</simplepara><simplepara>Fig 3</simplepara><!--Text-Node-->The text2<simplepara>Fig 4</simplepara><simplepara>Fig 5</simplepara><!--Text-Node--> the text3<simplepara>Fig 5</simplepara> 
</article> 

Antwort

3

Ändern Sie den XPath-Check self Achse statt Kind Achse zu verwenden:

following-sibling::node()[1][self::text()][normalize-space()!=''] 
+3

Gut (+1). Beachten Sie auch, dass '[normalize-space()! = '']' Zu '[normalize-space()]' vereinfachen kann – kjhughes

Verwandte Themen