我有以下 XML:
<root xmlns:myns="derf">
<child>
<grandchild>mikey</grandchild>
</child>
</root>
我正在尝试将其转换为以下 XML:
<root xmlns="theNamespace" xmlns:myns="derf">
<child>
<grandchild>mikey</grandchild>
</child>
</root>
我认为以下 XSLT 会做到这一点:
<xsl:template match="/">
<xsl:apply-templates select="/root"/>
</xsl:template>
<!-- identity template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<root xmlns="theNamespace">
<xsl:apply-templates select="@*|node()"/>
</root>
</xsl:template>
虽然发出:
<root xmlns="theNamespace">
<child xmlns="" xmlns:myns="derf">
<grandchild>mikey</grandchild>
</child>
</root>
有人可以帮助我理解 - 并且理想地修复 - 为什么xmlns:myns="derf"
最终出现在child
节点上而不是root
输出中的节点上?
我基本上只是想用xmlns
命名空间值来扩充原始 XML。
在此先感谢,马特