转换XSLT:复制内容

时间:2012-05-18 06:18:39

标签: xml xslt

我有一个XSL文件的以下输入:

<node>
    <xsl:value-of select="ROOT/LEVEL1/LEVEL2" />
</node>

我的预期输出是:

<node2>
    <xsl:value-of select="ROOT/LEVEL1/LEVEL2" />
</node2>

如何获得这个?

我能做的最好:

<xsl:template match="node" >
    <node2>
        <xsl:copy-of select="." />
    </node2>
</xsl:template>

产生:

<node2><node>
    <xsl:value-of select="ROOT/LEVEL1/LEVEL2"/>
</node></node2>

1 个答案:

答案 0 :(得分:2)

执行<xsl:copy-of select="." />会复制现有节点,但在您的情况下,您只想复制子节点。而是尝试这个

<xsl:copy-of select="node()" />

实际上,最好使用身份模板,因为这样可以进一步转换到节点元素的子元素,而不是按原样复制。例如:

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

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

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