我有这样的事情:
<node TEXT=" txt A "/>
<node TEXT="
txt X
"/>
<node>
<html>
<p>
txt Y
</p>
</html>
</node>
<node TEXT="txt B"/>
我想使用 XSLT 来获得这个:
txt A
txt X
txt Y
txt B
我想去除@TEXT 和 CDATA 的所有无用空格和换行符。唯一为输出提供结构的 XML 输入是
<node>
-标签。
最佳答案
以下转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="*">
<xsl:apply-templates select="@TEXT | node()"/>
</xsl:template>
<xsl:template match="node/@TEXT | text()">
<xsl:if test="normalize-space(.)">
<xsl:value-of select=
"concat(normalize-space(.), '
')"/>
</xsl:if>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
应用于此 XML 文档时
<t>
<node TEXT=" txt A "/>
<node TEXT=" txt X"/>
<node>
<html>
<p> txt Y </p>
</html>
</node>
<node TEXT="txt B"/>
</t>
产生想要的结果:
一个.txt
txt X
txt
txt
请注意标准 XPath 函数的使用 normalize-space() ,它会去除所有前导和尾随空格,并仅用一个空格替换其他空格的每个序列。
关于xslt - 如何删除所有换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/324822/