我有一个XML数据,如下所示
输入XML
<?xml version = "1.0" encoding = "UTF-8"?>
<Root>
<Child ID = "1">
<condition>true</condition>
<code>Error-1</code>
</Child>
<Child ID = "2">
<condition>false</condition>
<code>Error-2</code>
</Child>
<Child ID = "3">
<condition>true</condition>
<code>Error-3</code>
</Child>
<Child ID = "4">
<condition>false</condition>
<code>Error-4</code>
</Child>
<Child ID = "5">
<condition>true</condition>
<code>Error-5</code>
</Child>
<Child ID = "6">
<condition>true</conditions>
<code>Error-6</code>
</Child>
<Child ID = "7">
<condition>false</condition>
<code>Error-7</code>
</Child>
</Root>
我的要求是迭代所有子节点下的conditions元素。
如果条件元素的值为 true ,那么我必须在代码元素中获取相关值
预期产出:
<?xml version = "1.0" encoding = "UTF-8"?>
<code>Error-1</code>
<code>Error-3</code>
<code>Error-5</code>
<code>Error-6</code>
我一直在尝试根据子节点的属性 ID 执行此操作。当遍历条件元素时,如何获取其父节点的属性 ID (即子元素)并保留它以获取条件元素的值为真的相关代码。
答案 0 :(得分:1)
您需要以下样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Child">
<xsl:if test="condition[.='true']">
<xsl:apply-templates select="code"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
不知道您正在使用的XSLT的上下文我可以说您可以使用正确的XPath轻松完成此任务。
Root/Child[condition='true']/code
只要使用正确的谓词,就可以根据需要调整上下文。