我有这样的xml:
<definitions xmlns:xxx="test.com" xmlns:yyy="test2.com" test="test">
</definitions>
我需要像这样转换:
<test xmlns:xxx="test.com" xmlns:yyy="test2.com" test="test">
</test>
我写了一个像这样的xslt:
<xsl:template match="definitions">
<xsl:element name="test">
<xsl:copy-of select="@*" />
</xsl:element>
</xsl:template>
这会产生:
<test test="test">
</test>
但它不包含xmlns:xxx="test.com" xmlns:yyy="test2.com"
名称空间为什么?
我如何同时复制命名空间?
答案 0 :(得分:3)
它不包含xmlns:xxx =&#34; test.com&#34;的xmlns:YYY =&#34; test2.com&#34;命名空间为什么?
它不包含命名空间声明,因为它们不在任何地方使用 - 因此XSLT处理器不会输出它们。
我如何同时复制命名空间?
我不明白为什么你会想要它们 - 但如果你坚持,你可以明确地复制它们:
<xsl:template match="definitions">
<test>
<xsl:copy-of select="@* | namespace::*" />
</test>
</xsl:template>
请注意,在知道元素名称时,不必使用xsl:element
。
答案 1 :(得分:1)
名称空间也必须在XSL文件中声明:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="test.com"
xmlns:yyy="test2.com">
答案 2 :(得分:0)
似乎您只想将元素“定义”重命名为“test”。 你可以使用这样的东西。
<xsl:template match="definitions">
<test>
<xsl:apply-templates select="@*" />
</test>