检查不同节点之间是否有文本

Check if there text between different nodes

我想检查不同节点之间是否有文本。

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,但我不想在出现两次以上时这样做 <newLine></newLine>.所以我想接受一个空规则,但不能超过一个。 除此之外,我也不想在输出的末尾有一个或多个空规则。所以在Line7之后,可能什么都不会发生。

编辑:
为了更清楚一点:如果有 <newLine></newLine><newLine></newLine><newLine></newLine>,或者更多,我希望最多有 2 <br/> 个元素

我该怎么做?

如果我们将匹配限制在

<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

尝试:

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>