如何使用 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>
我正在努力改造以下 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>