Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 仅用不同的名称替换根元素-XSLT_Xml_Xslt - Fatal编程技术网

Xml 仅用不同的名称替换根元素-XSLT

Xml 仅用不同的名称替换根元素-XSLT,xml,xslt,Xml,Xslt,我对XSLT做了一些小改动,因为我想用不同的名称替换顶部根节点。我尝试使用以下XSLT添加新根,但无法删除输入xml的初始根。有人能告诉我我错过了什么吗。多谢各位 下面是XSLT代码 <?xml version='1.0' encoding='utf-8'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/T

我对XSLT做了一些小改动,因为我想用不同的名称替换顶部根节点。我尝试使用以下XSLT添加新根,但无法删除输入xml的初始根。有人能告诉我我错过了什么吗。多谢各位

下面是XSLT代码

                     <?xml version='1.0' encoding='utf-8'?>
                    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                        <xsl:output method="xml" encoding="UTF-8"/>

                        <xsl:template match="root">
                            <ns:NewParent xmlns:ns="http://test.com/user">
                                <xsl:copy-of select="." />
                            </ns:NewParent>
                        </xsl:template>

                        <xsl:template match="@*|node()">
                            <xsl:copy>
                                <xsl:apply-templates select="@*|node()"/>
                            </xsl:copy>
                        </xsl:template>

输入XML:

                    <root>
                        <root>
                            <a>TestA</a>
                            <b>Testb</b>
                            <c>Testc</c>
                        </root>
                        <root>
                            <a>TestA1</a>
                            <b>Testb1</b>
                            <l>Testl1</l>
                        </root>
                        <root>
                            <a>TestA12</a>
                            <b>Testb12</b>
                            <l>Testl2</l>
                        </root>
                    </root>

种皮
测试B
Testc
测试1
测试B1
测试1
测试12
测试B12
Testl2
输出/所需XML:

                    <ns:NewParent xmlns:ns="http://test.com/user">
                        <root>
                            <a>TestA</a>
                            <b>Testb</b>
                            <c>Testc</c>
                        </root>
                        <root>
                            <a>TestA1</a>
                            <b>Testb1</b>
                            <l>Testl1</l>
                        </root>
                        <root>
                            <a>TestA12</a>
                            <b>Testb12</b>
                            <l>Testl2</l>
                        </root>
                    </ns:NewParent>

种皮
测试B
Testc
测试1
测试B1
测试1
测试12
测试B12
Testl2

根目录
匹配的模板会复制节点本身以及所有子节点。您应该改为执行

<xsl:template match="root">
    <ns:NewParent xmlns:ns="http://test.com/user">
        <xsl:copy-of select="node()" />
    </ns:NewParent>
</xsl:template>
请注意模板现在如何匹配
/root
,以便它只匹配顶级
root
元素,而不匹配其子元素。

非常感谢Tim:)收到了。谢谢你的帮助。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8"/>

    <xsl:template match="/root">
        <ns:NewParent xmlns:ns="http://test.com/user">
            <xsl:apply-templates />
        </ns:NewParent>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>