将整个 xml 代码移动到另一个 xml 标签中

Move entire xml code inside another xml tag

我有 xml 代码,我想在 xml 代码的开头放置两个 xml 标签,以便所有代码都在这两个标签下

关于如何使用 XSLT 实现这一点有什么想法吗?我是 XSLT 的新手,试了一整天都徒劳无功...任何帮助将不胜感激。

我有一个 XML 看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
    <ns0:PCN xmlns:ns0="abc">
    <PCD>
    <PC>
    <TID>123456</TID>
    <Sequence>1</Sequence>
    <Type>M</Type>
    </PC>
    <PC>
    <TID>123457</TID>
    <Sequence>2</Sequence>
    <Type>M</Type>
    </PC>
    </PCD>
    </ns0:PCN>

我需要将其转换为如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <ns0:Messages xmlns:ns0="xyz">
    <ns0:Message1>
    <ns0:PCN xmlns:ns0="abc">
    <PCD>
    <PC>
    <TID>123456</TID>
    <Sequence>1</Sequence>
    <Type>M</Type>
    </PC>
    <PC>
    <TID>123457</TID>
    <Sequence>2</Sequence>
    <Type>M</Type>
    </PC>
    </PCD>
    </ns0:PCN>
    </ns0:Message1>
    </ns0:Messages>

请在下面找到我尝试的代码。这是我的第一次尝试,我是在参考了 xslt 的几个代码之后写的。它没有给我想要的结果。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <!-- Identity transform -->
   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>
   <xsl:template match="ns0:PCN">
      <xsl:copy-of select="."/>
     <ns0:Messages xmlns:ns0="xyz"/>
    <ns0:Message1/>
   </xsl:template>
</xsl:stylesheet>

简单的怎么样:

XSLT 1.0

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

<xsl:template match="/">
    <ns0:Messages xmlns:ns0="xyz">
        <ns0:Message1>
            <xsl:copy-of select="*"/>
        </ns0:Message1>
    </ns0:Messages>
</xsl:template>

演示https://xsltfiddle.liberty-development.net/3NJ38ZK

</xsl:stylesheet>