Juv*_*uve 14 xslt newline line-breaks
我有这样的事情:
<node TEXT=" txt A "/>
<node TEXT="
txt X
"/>
<node>
<html>
<p>
txt Y
</p>
</html>
</node>
<node TEXT="txt B"/>
Run Code Online (Sandbox Code Playgroud)
我想用XSLT来实现这个目的:
txt A
txt X
txt Y
txt B
Run Code Online (Sandbox Code Playgroud)
我想删除@ TEXT和CDATA的所有无用的空格和换行符.给输出结构的唯一XML输入是<node>
-tags.
Dim*_*hev 18
以下转型:
<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>
Run Code Online (Sandbox Code Playgroud)
</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 A
txt X
txt Y
txt B.
请注意标准XPath函数normalize-space()的使用,它会剥离所有前导和尾随空格,并用一个空格替换其他空间的每个序列.