2016-03-28 2 views
1

Предложить, как проверить элемент «simplepara» имеет текст сразу после него. [Матч Шаблон должен быть от 'simplepara', как указано в ниже XSLT]Как проверить непосредственный узел элемента - это текст?

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> 

Требуемый результат:

<?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> 

ответ

3

Изменить проверка XPath использовать self ось вместо оси детей:

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

Хорошо (+1). Также обратите внимание, что '[normalize-space()! = '']' Может упростить '[normalize-space()]' – kjhughes

Смежные вопросы