XSLT代码不会复制目标元素的现有属性

时间:2018-01-29 12:10:23

标签: xslt xslt-2.0

1。)目标XML是:

<Node1>
    <Node2>
        <Node3 attx="1" attry="2" attrz="3">
            <child1 att1="1" attr2="2" attr3="3"/>
            <child1 att1="1" attr2="2" attr3="3"/>
            <child1 att1="1" attr2="2" attr3="3"/>       
            </Node3>   
      </Node2>
</Node1>

2。)XSLT代码:

<xsl:template match="Node1/Node2/Node3">
  <xsl:copy>
    <xsl:apply-templates/>
    <BasicDouble attr1="104" attr2="12312" attr3="0" />
    <BasicEnum attr1="104" attr2="12312" attr3="0" />
      <Pair Key="0" Value="First"/>
      <Pair Key="1" Value="Last"/>
    </BasicEnum>
  </xsl:copy>
</xsl:template> 

3.)获得结果

<Node1>
    <Node2>
        <Node3>
            <child1 att1="1" attr2="2" attr3="3"/>
            <child1 att1="1" attr2="2" attr3="3"/>
            <child1 att1="1" attr2="2" attr3="3"/>   
            <BasicDouble attr1="104" attr2="12312" attr3="0" />
            <BasicEnum attr1="104" attr2="12312" attr3="0" />
                <Pair Key="0" Value="First"/>
                <Pair Key="1" Value="Last"/>            
        </Node3>   
    </Node2>
</Node1>

问题是,使用此代码,Node3的属性将被删除。 我应该如何更改脚本以便复制Node3的属性? 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

添加<xsl:copy-of select="@*" />作为<xsl:copy>元素的第一个子元素,以复制Node3的所有属性。
我还在一个元素上删除了一个结束/,以使XSLT格式良好。

<xsl:template match="Node1/Node2/Node3">
  <xsl:copy>
    <xsl:copy-of select="@*" />                      <!-- copy attributes -->
    <xsl:apply-templates />
    <BasicDouble attr1="104" attr2="12312" attr3="0" />
    <BasicEnum attr1="104" attr2="12312" attr3="0">  <!-- no closed element -->
      <Pair Key="0" Value="First"/>
      <Pair Key="1" Value="Last"/>
    </BasicEnum>
  </xsl:copy>
</xsl:template>