我想检查不同节点之间是否有文字。
XML:
<text>
Line1<newLine></newLine>
Line2<newLine></newLine>
Line3<newLine></newLine><newLine></newLine>
Line4<newLine></newLine><newLine></newLine>
Line5<newLine></newLine><newLine></newLine><newLine></newLine>
Line6<newLine></newLine>
Line7<newLine></newLine><newLine></newLine><newLine></newLine><newLine></newLine>
</text>
我目前的XSLT如下:
<xsl:template match="newLine">
<br></br>
</xsl:template>
我当前的输出如下(忽略最后的。):
Line1
Line2
Line3
Line4
Line5
Line6
Line7
.
我想接受newLine
作为标记,我希望它将其翻译为br
,但我不想这样做超过两次{{} 1}}。所以我想接受一个空洞的规则,但不能超过一个。
除此之外,我也不想在输出的末尾有一个或多个空规则。因此,在Line7之后,什么都不会发生。
修改
为了更清楚一点:如果有<newLine></newLine>
,或者甚至更多,我希望最多有2个<newLine></newLine><newLine></newLine><newLine></newLine>
元素
我该怎么做?
答案 0 :(得分:1)
如果我们限制匹配
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="newLine[following-sibling::node()[1][normalize-space()]] |
newLine[following-sibling::node()[1][self::newLine[following-sibling::node()[1][normalize-space()]]]]">
<br/>
</xsl:template>
</xsl:stylesheet>
然后输入
<text>
Line1<newLine></newLine>
Line2<newLine></newLine>
Line3<newLine></newLine><newLine></newLine>
Line4<newLine></newLine><newLine></newLine>
Line5<newLine></newLine><newLine></newLine><newLine></newLine>
Line6<newLine></newLine>
Line7<newLine></newLine><newLine></newLine><newLine></newLine><newLine></newLine>
</text>
结果是
Line1<br/>
Line2<br/>
Line3<br/><br/>
Line4<br/><br/>
Line5<br/><br/>
Line6<br/>
Line7
答案 1 :(得分:0)
尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="text">
<xsl:apply-templates select="text()"/>
</xsl:template>
<xsl:template match="text()">
<xsl:copy-of select="."/>
<xsl:if test="following-sibling::text()">
<xsl:apply-templates select="following-sibling::newLine[1]"/>
</xsl:if>
</xsl:template>
<xsl:template match="newLine" >
<br/>
<xsl:if test="following-sibling::node()[1][self::newLine]">
<br/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>