如何使用 XSLT 根据子节点的条件复制父节点?

How to copy parent node based on child node's condition using XSLT?

我正在努力改造以下 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,那么复制父节点。如果有人对此提供帮助,我将不胜感激。

提前致谢。

如果您输入的 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>