删除具有相似名称的XML标记

时间:2015-07-16 02:54:38

标签: xml xslt xsd xml-parsing

 XML :
<tag1>

<tag2>

<tag2>
</tag2>

<tag2>
</tag2>

<tag2>
</tag2>

</tag2>

</tag1>

我有以上类型的xml。 tag2的父节点,tag2内有多个tag2子节点。我想从xml中删除父tag2节点。我怎么能这样做?

我现在想要下面

  <tag1>

  <tag2>---remove

  <tag2>
  </tag2>

  <tag2>
  </tag2>

  <tag2>
  </tag2>

  </tag2>--remove

  </tag1>

1 个答案:

答案 0 :(得分:2)

这是一个可能的XSL:

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

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

    <xsl:template match="tag2[tag2]">
        <xsl:apply-templates select="node()"/>
    </xsl:template>

</xsl:stylesheet>

简要说明:

  • <xsl:template match="@* | node()">...:身份模板。此模板将应用它的所有节点和属性复制到输出XML。

  • <xsl:template match="tag2[tag2]">...:此模板会覆盖具有另一个<tag2>子项的<tag2>元素的身份模板。此模板仅将标识模板应用于父<tag2>的子节点,以便不会将父<tag2>复制到输出XML。