XPath 获取兄弟节点的值

1 xslt xpath

我正在使用一个生成 XML 的测试工具,如下所示

    <detail>
        <results>
            <component>A</component>
            <test>
                <property>performance</property>
                <result>FAIL</result>
            </test>
            <test>
                <property>memory</property>
                <result>PASS</result>
            </test>
        </results>

        <results>
            <component>B</component>
            <test>
                <property>files</property>
                <result>PASS</result>
            </test>
            <test>
                <property>handles</property>
                <result>FAIL</result>
            </test>
        </results>
    </detail>
Run Code Online (Sandbox Code Playgroud)

请注意,每个结果元素包含 1 个组成元素和 0-*测试元素。我想获取每个详细信息>结果>组件详细信息>结果>测试>属性的文本,其中详细信息>结果>测试>结果文本为“失败”。

有没有 XPath 表达式可以做到这一点?

如果没有,是否有一个简单的 XSLT 可以将示例转换为我可以导入到电子表格中的内容,例如

  A,performance,FAIL
  A,memory,PASS
  B,files,PASS
  B,handles,FAIL
Run Code Online (Sandbox Code Playgroud)

小智 5

此 Xpath 将为您提供失败的属性:

//detail/results/test[result = 'FAIL']/property
Run Code Online (Sandbox Code Playgroud)

这将为您提供部分失败的组件的名称:

//detail/results[test/result = 'FAIL']/component
Run Code Online (Sandbox Code Playgroud)

结合这些,您可以找到所有失败的结果:

//detail/results[test/result = 'FAIL']
Run Code Online (Sandbox Code Playgroud)

然后在其中迭代以获取该结果中所有失败的测试并返回失败的属性:

$result/test[result = 'FAIL']/property
Run Code Online (Sandbox Code Playgroud)

我还没有使用可以测试 XSL 的机器,但是将上述 XPath 组合在一起应该不难。