我有:
<nodes>
<node>
<name>node1</name>
<other>stuff1</other>
<node>
<name>node11</name>
<other>stuff11</other>
</node>
<node>
<name>node12</name>
<other>stuff12</other>
</node>
</node>
<node>
<name>node2</name>
<other>stuff2</other>
</node>
<node>
<name>node3</name>
<other>stuff3</other>
</node>
</nodes>
我希望最终得到一个扁平的结构,如:
<nodes>
<node>
<name>node1</name>
<other>stuff1</other>
</node>
<node>
<name>node11</name>
<other>stuff11</other>
</node>
<node>
<name>node12</name>
<other>stuff21</other>
</node>
<node>
<name>node2</name>
<other>stuff2</other>
</node>
<node>
<name>node3</name>
<other>stuff3</other>
</node>
</nodes>
这是一个简单的例子,但我希望复制每个节点中的所有元素,而不是嵌套的“节点”元素。我尝试了副本以保留标签,但这也保留了嵌套。我也尝试过复制,但这样就没有孩子了。
有什么想法吗?
答案 0 :(得分:1)
这应该做你想要的。对于顶级nodes
元素,它按文档顺序为所有后代node
元素应用模板。对于每个node
,它会复制所有非node
子元素。
<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:copy-of select="*[local-name() != 'node']"/></xsl:copy>
</xsl:template>
<xsl:template match="/nodes">
<xsl:copy><xsl:apply-templates select="descendant::node" /></xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
我会使用XQuery。它好多了:
<nodes>
{ //node/<node> { (name, other) } </node> }
</nodes>