XSL副本,删除所有层次结构中的特定属性和标记

时间:2013-10-09 13:47:19

标签: xml xslt

我希望在使用xsl进行复制时删除所有特定标记(qq)的一个特定属性(d)。是否可以使用xsl:copy-of(不是xsl:copy)?

执行此操作

XML来源:

<main>
    <x b="c">
      <y b="e">
        <qq d="f"/>
      </y>
      <z>
        <qq d="f"/>
        <y b="e">
          <qq d="f"/>
        </y>
      </z>
      <qq d="g"/>
    </x>
</main>

通缉输出:

<x b="c">
  <y b="e">
    <qq />
  </y>
  <z>
    <qq />
    <y b="e">
      <qq />
    </y>
  </z>
  <qq />
</x>

我试过

<xsl:copy-of select="x[name(.) !='qq' and name(@) != 'd'"/>

但它不起作用。

由于

1 个答案:

答案 0 :(得分:2)

copy-of在这里不会帮助您,但身份模板会:

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

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

  <xsl:template match="qq/@d" />

  <xsl:template match="/*">
    <xsl:apply-templates select="*" />
  </xsl:template>
</xsl:stylesheet>

运行样本输入时的结果:

<x b="c">
  <y b="e">
    <qq />
  </y>
  <z>
    <qq />
    <y b="e">
      <qq />
    </y>
  </z>
  <qq />
</x>