我需要选择一个标签与他的所有子标签,但我需要删除一个特殊的标签什么可以在"主"标签的任何地方。在我的例子中的"主"标签是Deeper2,我需要删除所有的"ShouldDelete"标签与他的值(所以删除那一行)。在我可以清除这个选定的标签后,我需要把它放在一个新的"边界"。我的xml像这样:
<Edge>
<Deeper>
<Deeper2>
<Something>..</Something>
<Something2>..</Something2>
<Something3>..</Something3>
<Something4>..</Something4>
<Something5>
<Something6>..</Something6>
<Something7>..</Something7>
<ShouldDelet>..</ShouldDelet>
</Something5>
<Something8>..</Something8>
<Something9>..</Something9>
<Something10>
<Something6>..</Something6>
<ShouldDelet>..</ShouldDelet>
</Something10>
<ShouldDelet>..</ShouldDelet>
</Deeper2>
</Deeper>
</Edge>
And i need this
<Deeper2>
<Something>..</Something>
<Something2>..</Something2>
<Something3>..</Something3>
<Something4>..</Something4>
<Something5>
<Something6>..</Something6>
<Something7>..</Something7>
</Something5>
<Something8>..</Something8>
<Something9>..</Something9>
<Something10>
<Something6>..</Something6>
</Something10>
</Deeper2>
毕竟需要把它放在一个新的"border"中,像这样:
<MyNewTag>
<MyNewTag2>
<Deeper2>
<Something>..</Something>
<Something2>..</Something2>
<Something3>..</Something3>
<Something4>..</Something4>
<Something5>
<Something6>..</Something6>
<Something7>..</Something7>
</Something5>
<Something8>..</Something8>
<Something9>..</Something9>
<Something10>
<Something6>..</Something6>
</Something10>
</Deeper2>
</MyNewTag2>
</MyNewTag>
您需要一个标识模板(基本上是输入的精确副本)和覆盖模板。以下样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Edge">
<MyNewTag>
<xsl:apply-templates/>
</MyNewTag>
</xsl:template>
<xsl:template match="Deeper">
<MyNewTag2>
<xsl:apply-templates/>
</MyNewTag2>
</xsl:template>
<!-- an empty match deletes the node -->
<xsl:template match="ShouldDelet"/>
</xsl:stylesheet>
应用于输入XML时,生成:
<?xml version="1.0" encoding="utf-8"?>
<MyNewTag>
<MyNewTag2>
<Deeper2>
<Something>..</Something>
<Something2>..</Something2>
<Something3>..</Something3>
<Something4>..</Something4>
<Something5>
<Something6>..</Something6>
<Something7>..</Something7>
</Something5>
<Something8>..</Something8>
<Something9>..</Something9>
<Something10>
<Something6>..</Something6>
</Something10>
</Deeper2>
</MyNewTag2>
</MyNewTag>