从节点XSLT中删除所有\ n \ r \ n字符?

时间:2009-02-16 09:41:41

标签: javascript xml xslt xpath

想知道你能帮我吗?我在xml中有节点,如下所示

$ LOG:08880xbpnd $
fhdsafidsfsd
DF
SD
FSD
˚F
SD
FSD

我想知道是否有将所有文本转到一行,以便它可以传递到javascript函数?所以它会像这样

$ LOG:08880xbpnd $ fhdsafidsfsddfsdfsdfsdfsd

2 个答案:

答案 0 :(得分:13)

不幸的是,normalize-space()函数(在andynormancx的答案中使用)不仅仅是删除换行符

删除所有前导空格和尾随空格,用一个空格字符替换任何一组内部空白空格

在许多情况下,我们只想删除一种类型的空白字符(如当前情况 - 新行(CR + LF在XML解析器读取时自动规范化为LF)。

这样做的正确和安全的方法是使用标准XPath translate()函数

translate(., '
', '')

返回从当前节点的字符串值获取的字符串,其中删除了任何换行符。

以下是一个示例

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="text()">
    <xsl:value-of 
     select="translate(.,'&#xA;','')"/>
  </xsl:template>
</xsl:stylesheet>

在此源XML文档上应用上述转换时

<t>
$LOG: 08880xbpnd $
"embedded    blanks    must    stay"
df
sd
fsd
f
sd
fsd
</t>

结果仅在一行上,根据需要,所有嵌入的空格保持不变

<t>$LOG: 08880xbpnd $"embedded    blanks    must    stay"dfsdfsdfsdfsd</t>

答案 1 :(得分:7)

normalize-space() XPath函数应该可以执行您想要的操作。