正在将节点属性复制到xslt中的新节点



我有这样的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>

相关内容

  • 没有找到相关文章