选择名称的XPath和子属性的过滤器

时间:2016-01-19 09:55:54

标签: xml xpath

我有这样的XML:

<xml>
  <...>
    <...>
      <test name="Test A">
          ...
        <status status="PASS">
      </test>

      <test name="Test B">
          ...
        <status status="FAIL">
      </test>

      <test name="Test C">
          ...
        <status status="PASS">
      </test>
</xml>

我想在一个XPath中选择已通过测试的名称:"Test A", "TestC" 现在我必须使用XPath并且不知道如何将它们组合在一起。

xpath_tests_name = "//tests/@name'
xpath_passed_tests = "//test[status[@status='PASS']]"

我知道我可以在同一个循环中完成它:首先通过测试,并为每个传递得到它的名字。

然而,我正在寻找最美丽的&#34;溶液

2 个答案:

答案 0 :(得分:2)

我不知道我是否理解你,但如果你想要一个特定的人,请这样做:

//status[@status="PASS"]/parent::test[@name="Test A"]

所有名字都是PASS:

//status[@status="PASS"]/parent::test/@name

我希望这会有所帮助。

答案 1 :(得分:2)

  

然而,我正在寻找最美丽的&#34;溶液

写这个表达的方式更直接(也更美丽,在我个人看来)是

/xml/test[status/@status = 'PASS']/@name

表达式返回一组属性节点。要提取它们的值,您可能需要进一步处理它们,具体取决于您的XPath环境。