我有一个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>
期待一些帮助
答案 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>