我有 XML 的以下代码:
<para>
<break/>
<break/>
<break/>
<break/> Text1<break/>
<break/> Text2<break/>
<break/>
<break/>
<break/>
<break/>
</para>
我需要关注:
<para>
<br>
Text1
<br>
Text2
<br>
</para>
我写了 XSLT 它:
<xsl:template match="/">
<html><body><xsl:apply-templates /></body></html>
</xsl:template>
<xsl:template match="para">
<p><xsl:apply-templates /></p>
</xsl:template>
<xsl:template match="break">
<xsl:if test="following-sibling::break and .='' ">
<br><xsl:apply-templates /></br>
</xsl:if>
</xsl:template>
但它不起作用。你能帮助我吗?
答案 0 :(得分:2)
您请求的输出无效(<br>
元素未关闭)。假设你想得到类似的东西:
<p>
<br/> Text1<br/> Text2<br/>
</p>
尝试:
<xsl:strip-space elements="*"/>
...
<xsl:template match="para">
<p>
<br/>
<xsl:apply-templates select="text()" />
</p>
</xsl:template>
<xsl:template match="para/text()">
<xsl:copy/>
<br/>
</xsl:template>
答案 1 :(得分:1)
我找到了解决问题的方法:
<xsl:template match="para">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="break">
<xsl:if test="normalize-space(following-sibling::node()[1]) != '' or name(following-sibling::node()[2]) != 'break'">
<br/>
</xsl:if>
</xsl:template>