2

我正在尝试转换传入的 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 中是否可行。

谢谢。

4

1 回答 1

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>
于 2012-08-01T21:48:26.840 回答