如何使用XSLT基于子节点的条件复制父节点?

时间:2015-01-14 02:43:52

标签: xml xslt transformation

我正致力于转换以下xml。

<root>

<node1>
  <node2 id="1">xyz</node2>
</node1>

<node1>
  <node2 id="2">abc</node2>
</node1>

<parent>
 <child>abc</child>
</parent>

</root>

我想将其转换为以下格式:

<root>

<node1>
  <node2 id="1">xyz</node2>
</node1>

<parent>
 <child>abc</child>

 <node1>
  <node2 id="2">abc</node2>
 </node1>

</parent>

</root>
  • 我使用身份模板复制所有元素
  • 我已添加模板以复制子元素

       

我需要检查id属性,如果它等于2,则复制父节点。如果有人帮忙,我将不胜感激。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您输入的XML格式与您的问题没有太大差异,那么此XSLT将起作用:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="/*/*[*[@id = '2']]"/>

<xsl:template match="parent">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
        <xsl:copy-of select="/*/*[*[@id = '2']]"/>
    </xsl:copy>
</xsl:template>
</xsl:transform>