在xslt中使用copy-of时删除xml:space属性

时间:2011-07-29 12:52:03

标签: xslt xml-attribute

以下是我的input.xml文件中代码的一部分:

<info>
<name>
<surname>Sachin</surname>
<x> </x>
<given-names>J</given-names>
</name>
<x>, </x>
<name>
<surname>Sushant</surname>
<x> </x>
<given-names>K</given-names>
</name>
</info>

当我使用{/ 1}}元素复制这些节点时,如

copy-of

然后生成以下输出:

<xsl:copy-of select="info"></xsl:copy-of>

我想从output.xml文件中删除<info> <name> <surname>Sachin</surname> <x xml:space="preserve"> </x> <given-names>J</given-names> </name> <x xml:space="preserve">, </x> <name> <surname>Sushant</surname> <x xml:space="preserve"> </x> <given-names>K</given-names> </name> </info>

1 个答案:

答案 0 :(得分:3)

xsl:copy-of制作精确副本。如果您想进行任何更改,无论多么小,那么您需要使用“修改后的身份模板”编码模式。在这种情况下,以下模板规则应该执行此操作:

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@* except xml:space"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

(“except”运算符是XPath 2.0 - 如果你遇到1.0,请使用@*[name() != 'xml:space']