Xslt 如何删除元素中文本结尾的空格。(XSL)

Xslt 如何删除元素中文本结尾的空格。(XSL),xslt,Xslt,有人知道什么XSL代码会删除元素中最后一个单词后的尾随空格吗 <p>This is my paragraph. </p> 这是我的段落 谢谢 看看这个函数 <xsl:template match="p"> <p><xsl:value-of select="normalize-space()" /></p> </xsl:template> 小心,有一个陷阱(可能与您有关,也可能与您无关): […]

有人知道什么XSL代码会删除元素中最后一个单词后的尾随空格吗

<p>This is my paragraph.  </p>
这是我的段落

谢谢

看看这个函数

<xsl:template match="p">
  <p><xsl:value-of select="normalize-space()" /></p>
</xsl:template>

小心,有一个陷阱(可能与您有关,也可能与您无关):

[…]函数返回 带空格的参数字符串 通过剥离引线和 尾随空格并替换 空格字符序列 单个空格


这意味着它还将删除所有换行符、制表符和其他空白,并将它们转换为一个空格。

编辑:由于Tomalak的提示,代码显著简化

这里是一个XPath 2.0/XSLT 2.0解决方案,它只删除尾随空格:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 >
  <xsl:output method="text"/>

  <xsl:template match="text()">
    "<xsl:sequence select="replace(., '\s+$', '', 'm')"/>"
  </xsl:template>
</xsl:stylesheet>
您可以看到XSLT1.0解决方案(实现了几乎相同的思想),它使用:


此解决方案不正确,因为除了删除尾随空格外,它还删除了其他空格。没错。我想这样更好:我在回答中强调了微妙的一点。如果它不影响操作,我想normalize-space()就足够了。@joe,normalize-space()删除所有起始空格和所有尾随空格。它还用一个空格替换每组内部空白。您没有起始空格,所有内部空格都只是一个空格。如果有其他输入,可能会有更多(意外的)更改。不是吗?“^\s+|\s+$”应该可以完成这项工作。@joe,normalize-space()删除所有起始空格和所有尾随空格。它还用一个空格替换每组内部空白。您没有起始空格,所有内部空格都只是一个空格。有了另一个输入,可能会有更多(意想不到的)变化。@Tomalak可能是的,但我需要看看参考书。当我回答时,我只有几秒钟的空闲时间,所以这反映了我对正则表达式的肤浅认识。@Tomalak你说得对。这将修剪字符串:replace(,“^\s+\s+$”,“,”,“m”)。我知道正则表达式无法解决的问题是,字符串是否包含平衡括号。
<someText>   This is    some text       </someText>
"   This is    some text"