我有多个XML文件,可以作为XSLT的输入。在这些多输入XML文件中,我不知道可以使用的所有命名空间,我不知道可以使用的所有根节点,我所知道的是所有元素都在一个命名空间中。
所以我的输入XML可能是:
<?xml version="1.0" encoding="UTF-8"?>
<foo:someUnknownRoot xmlns:foo="http://anUnknownNamespace/foo">
<foo:element>value</foo:element>
</foo:someUnknownRoot>
另一个可能是:
<?xml version="1.0" encoding="UTF-8"?>
<bar:anotherUnknownRoot xmlns:bar="http://anUnknownNamespace/bar">
<bar:element>value</bar:element>
</bar:anotherUnknownRoot>
我想创建一个只复制完整输入的XSLT,并在自己定义的前缀中添加元素。我希望在根节点上声明命名空间。
所以我希望像这样的输出(一个例子):
<?xml version="1.0" encoding="UTF-8"?>
<bar:anotherUnknownRoot xmlns:bar="http://anUnknownNamespace/bar" xmlns:added="http://myAddedNamespace/added">
<added:element>value</added:element>
<bar:element>value</bar:element>
</bar:anotherUnknownRoot>
我尝试过以下XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:added="http://myAddedNamespace/added">
<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>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<added:element>value</added:element>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但这会输出:
<?xml version="1.0" encoding="UTF-8"?>
<bar:anotherUnknownRoot xmlns:bar="http://anUnknownNamespace/bar">
<added:element xmlns:added="http://myAddedNamespace/added">value</added:element>
<bar:element>value</bar:element>
</bar:anotherUnknownRoot>
当然这是正确的XML,但为了便于阅读,我想将“添加的”命名空间添加到根节点。
答案 0 :(得分:0)
只需添加
<xsl:namespace name="added">http://myAddedNamespace/added</xsl:namespace>
在<xsl:copy>
之后