删除xml文档中的所有前导和尾随空格

时间:2012-08-14 10:46:14

标签: xml xslt xslt-1.0

有没有办法可以使用xslt删除xml文档中元素和属性中的所有前导和尾随空格?

<Root>
  <a>string    </a>
  <b r="another   ">second    </b>
</Root>

预期产出

<Root>
  <a>string</a>
  <b r="another">second</b>
</Root>

注意:这是一个示例xml,我的源xml文档中有许多元素和属性。

1 个答案:

答案 0 :(得分:2)

如果您使用normalize-space()函数,则结果是删除了所有前导和尾随空白字符的字符串

但是,它还会用一个空格字符替换任何一组中间空白字符。

如果您不想要最后提到的效果,那么一种解决方案是使用FXSL 1.x trim模板功能(FXSL完全用XSLT 1.0编写)。

以下是使用trim模板/函数的一个小例子:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:import href="trim.xsl"/>

  <!-- to be applied on trim.xml -->

  <xsl:output method="text"/>
  <xsl:template match="/">
    '<xsl:call-template name="trim">
        <xsl:with-param name="pStr" select="string(/*)"/>
    </xsl:call-template>'
  </xsl:template>
</xsl:stylesheet>

对以下XML文档应用此转换时:

<someText>

   This is    some text   

</someText>

产生了想要的正确结果:

'This is    some text'