【问题标题】:XML tag removal with similar names删除具有相似名称的 XML 标记
【发布时间】:2015-07-16 02:54:37
【问题描述】:
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>
【问题讨论】:
标签:
xml
xslt
xsd
xml-parsing
【解决方案1】:
这是一种可能的 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。