如何在注入空节点时复制节点的属性

时间:2014-05-22 19:14:24

标签: xslt

我有一个XML

<ParentA Id="P1" Title="Parent1 Details>   
    <Child Att1="abcd" Id="Id1" Title="Public" Bind="Prop1" AccessItem="0">
    </Child>
</Parent>
<ParentA Id="P2" Title="Parent2 Details>   
    <Child Att1="abcde" Id="Id2" Title="Public" Bind="Prop2" AccessItem="0">
    </Child>    
 </Parent>

我想要注释一个空白标签ParentB,如下面的ParentA所示。

<ParentA Id="P1" Title="Parent1 Details>
    <ParentB>
        <Child Att1="abcd" Id="Id1" Title="Public" Bind="Prop1" AccessItem="0">
        </Child>
    </ParentB>
</Parent>

当我添加以下XSL代码时,ParentA的属性将移至ParentB。

<xsl:template match="ParentA">              
<xsl:copy>   
    <ParentB>                     
        <xsl:apply-templates/>    
    </ParentB>  
</xsl:copy>
</xsl:template>

我得到以下输出。 ParentA或ParentB上没有属性。

<ParentA>
    <ParentB>
        <Child Att1="abcd" Id="Id1" Title="Public" Bind="Prop1" AccessItem="0">
        </Child>
    </ParentB>
</Parent>

当我添加以下代码时。

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

我得到以下输出,其中ParentA的属性被复制到ParentB

<ParentA>
<ParentB Id="P1" Title="Parent1 Details">
    <Child Att1="abcd" Id="Id1" Title="Public" Bind="Prop1" AccessItem="0">
    </Child>
</ParentB>

期待一些帮助

1 个答案:

答案 0 :(得分:1)

以这种方式尝试:

<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:strip-space elements="*"/>

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

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

</xsl:stylesheet>