我有一个具有以下结构的xml:
<tuple>
<something>One</something>
<somethingelse>Two</somethingelse>
<somethingextra>
<tuple>
<somethingextra2>Three</somethingextra2>
</tuple>
</somethingextra>
</tuple>
我想弄清楚如何删除子<tuple>
元素,同时保留内容。
<tuple>
<something>One</something>
<somethingelse>Two</somethingelse>
<somethingextra>
<somethingextra2>Three</somethingextra2>
</somethingextra>
</tuple>
非常欢迎任何帮助或建议。
答案 0 :(得分:0)
您需要一种方法来区分要删除的根tuple
元素和tuple
元素。
例如,这将删除具有父元素的任何 tuple
元素:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*/tuple">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您还可以在遍历XML树时切换到额外模式。在标准模式下,您可以复制所有元素,但是在模式“noTuple&#39;您跳过节点副本并返回正常模式。
productChanged
答案 2 :(得分:0)
michael.hor257k出色地回答了这个问题。 这是我的变化,它也处理了我的一些其他变化。
<?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" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<!-- Convert any atom, table or tuple element to a new element with the name attribute as the element name -->
<xsl:template match="atom[@name] | table[@name] | tuple[@name]">
<xsl:element name="{@name}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
</xsl:stylesheet>