我有这样的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"
名称空间,为什么?
如何与命名空间一起复制?
它不包含xmlns:xxx="test.com"xmlns:yyy="test2.com"名称空间,为什么?
它不包含名称空间声明,因为它们不在任何地方使用,所以XSLT处理器不输出它们。
如何与命名空间一起复制?
我不明白你为什么想要它们——但如果你坚持,你可以明确地复制它们:
<xsl:template match="definitions">
<test>
<xsl:copy-of select="@* | namespace::*" />
</test>
</xsl:template>
请注意,当元素的名称已知时,不必使用xsl:element
。
名称空间也必须在XSL文件中声明:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="test.com"
xmlns:yyy="test2.com">
您似乎只想将元素"definitions"重命名为"test"。你可以用这样的东西。
<xsl:template match="definitions">
<test>
<xsl:apply-templates select="@*" />
</test>