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

时间:2019-06-13 07:24:22

标签: xslt sap

我有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>

1 个答案:

答案 0 :(得分:0)

简单地说:

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>