在XSLT转换中保存原始xml

时间:2012-08-01 20:20:06

标签: xml xslt

我正在尝试转换传入的XML,但将原始xml保留在新节点中。

假设正在转换以下XML。

<Document>
   <Number>12345</Number>
   <Name>Person Name</Name>
</Document>

我想要的输出是:

<Document>
   <Number>12345</Number>
   <OriginalXml>
       <![CDATA[
           ^^ the above xml ^^
       ]]
   </OriginalXml>
</Document>

我很容易在C#中做过,但开发经理想知道它是否可以在XSLT中使用。

感谢。

1 个答案:

答案 0 :(得分:3)

你可以这样做:

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="/Document">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
            <OriginalXml>
                <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
                <xsl:copy-of select="."/>
                <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
            </OriginalXml>      
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Name"/>

</xsl:stylesheet>

<强>输出

<Document>
   <Number>12345</Number>
   <OriginalXml>
      <![CDATA[<Document>
         <Number>12345</Number>
         <Name>Person Name</Name>
      </Document>]]>
   </OriginalXml>
</Document>