xslt - 如何删除所有换行符?

标签 xslt newline line-breaks

我有这样的事情:

<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(.), '&#xA;')"/>
  </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/

相关文章:

XSLT 选择唯一节点

java - String.indexOf() 找不到 System.lineSeparator();

jquery - JQuery 能否在换行到第二行之前检测到一行中的最后一个元素?

newline - CR LF、LF 和 CR 换行符类型之间的区别

xml - 调试xslt的工具

xml - 如何将 XML 插入现有 XML 节点

c# - 尝试使用 OOPFactory 解析使用 EligibilityBenefitDocument 的 271 个好处

windows - 从 cygwin 程序的输出中剥离 ^M

php - 如何从 php 字符串中删除新行和返回?

javascript - 为什么我的换行符不会在 JavaScript 中变得不活动?