一个 XSLT 解决方案dataset
(Sean 的解决方案很好,但如果其他元素或节点成为 的子节点,它将停止工作datasets
):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="datasets/node()"/>
</xsl:stylesheet>
当此转换应用于提供的骨架 XML(包装到单个顶部元素中以使其成为格式良好的 XML 文档)时:
<t>
<owner name="thename">
<datasets ndatasets="10" size="10000">
<dataset size="100" creationdate="...">mydataset1</dataset>
<dataset size="200" creationdate="...">mydataset2</dataset>
</datasets>
</owner>
<owner name="thename2">
<datasets ndatasets="10" size="10000">
<dataset size="100" creationdate="...">mydataset1</dataset>
<dataset size="200" creationdate="...">mydataset2</dataset>
</datasets>
</owner>
</t>
产生了想要的正确结果:
<t>
<owner name="thename">
<datasets ndatasets="10" size="10000"/>
</owner>
<owner name="thename2">
<datasets ndatasets="10" size="10000"/>
</owner>
</t>
说明:
正确使用标识规则并使用匹配任何子节点的空体模板覆盖它datasets
。