使用xslt选择特定的子元素节点树以进行输出

时间:2011-03-24 22:35:54

标签: xslt

我有一些XML有一个额外的元素,我希望它消失。输入XML:

<top><middle><bottom><!-- other elements --><stuff/></bottom></middle></top>

所需输出:

<top><bottom><!--other elements --><stuff/></bottom></top>

(注意“中间”元素已从节点树中剪断)

如何在不必创建源中每个可能元素的模板级联的情况下随意剪切元素?有没有办法从给定的点传递所有元素和子元素?包括XML标记,属性和内容?

搜索我已经使用<xsl:copy>完成了提及,但它不起作用 - "node()|@*"仅返回内容和属性值,而不返回实际的子元素XML树。

如何在XSLT 1或2中执行此操作?我现在这样做的方法是为每个元素创建一个模板树,但是“stuff”?

1 个答案:

答案 0 :(得分:2)

对于要删除的元素,使用Identity Transform和覆盖:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="middle">
      <xsl:apply-templates/>
  </xsl:template>
</xsl:stylesheet>