在XSLT中,如何将所有子节点中的所有属性复制到xml的根节点?

时间:2017-08-25 13:19:34

标签: xml xslt-1.0 xslt-2.0

我想要一个XSLT程序,它将以一种方式转换XMl文件,该方法将从根节点的所有子节点(直到深层)读取/提取所有属性并复制到父节点。然后删除所有子节点。 输入xml

enter code here
<root>
  <a key="1"/> 
  <b key1="2">
    <c key3="3"/>
  </b>
</root> 

和输出xml将是这样的:

<root key="1" key1="2" key3="3" />

1 个答案:

答案 0 :(得分:1)

你可以做得很简单:

XSLT 1.0

<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="/root">
    <xsl:copy>
        <xsl:copy-of select="//@*"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

但是,元素不能具有两个具有相同名称的属性。如果您的XML具有多个相同属性的实例,则它们将相互覆盖,并且只有最后一个将出现在输出中。