代码之家  ›  专栏  ›  技术社区  ›  Hannibal

[xpath]需要帮助获取与另一行相邻的表行的xpath

  •  2
  • Hannibal  · 技术社区  · 16 年前

    编辑:为什么投票否决?我真的不知道…顺便问一下../不起作用,因为我不想要表的父级,但实际上想要../td+1我不知道这是否可能?

    嗨,伙计们。

    我手头有一个相当复杂的问题。

    我有一张这样的桌子:

    名称结果自动测试自动测试结果自动测试名称

    X通过X86HZS1|||

    所以…我想做的是以下。我只知道ID。我想从自动测试更新自动测试结果。一开始是空的。

    我在找身份证…我有。但是当我有了ID之后,我必须更新它旁边的行。我该怎么做?我尝试使用xpath。使用../../../td等工具后退,但没有运气。

    我好像找不到它的邻桌…

    有人能给我指个方向吗?

    非常感谢您的帮助!

    汉尼拔

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    此外 jasso 很好的推荐 following-sibling 轴心国,这个答案有点问题:你必须解决什么 td 是自动测试的。

    因此,了解表的模式:

    <table> 
      <tr> 
        <td>Name</td> 
        <td>Result</td> 
        <td>AutotestID</td> 
        <td>AutotestResult</td> 
        <td>AutotestName</td> 
      </tr> 
      <tr> 
        <td>X</td> 
        <td>Pass</td> 
        <td>X86HZS1</td> 
        <td></td> 
        <td></td> 
      </tr> 
    </table> 
    

    你可以使用:

    /table/tr/td[3][.='X86HZS1']/following-sibling::td[1]
    

    /table/tr[td[3]='X86HZS1']/td[4]
    

    如果不知道自动测试位置,可以使用:

    /table/tr/td[count(../../tr/td[.='AutotestID']/preceding-sibling::td)+1]
                [.='X86HZS1']/following-sibling::td[1]
    
        2
  •  1
  •   jasso    15 年前

    你的问题不清楚,但我在猜测,假设你有一个XHTML文件

    <table>
      <tr>
        <td>Name</td>
        <td>Result</td>
        <td>AutotestID</td>
        <td>AutotestResult</td>
        <td>AutotestName</td>
      </tr>
      <tr>
        <td>X</td>
        <td>Pass</td>
        <td>X86HZS1</td>
        <td></td>
        <td></td>
      </tr>
    </table>
    

    您正试图创建一个XPath表达式来选择下一个 <td> 元素,位于包含文本“x86hzs1”(自动测试)的元素之后。要查找具有特定文本内容的节点,可以使用谓词和出现在此节点之后的同级元素,这些元素按照使用axis获得的文档顺序显示。 following-sibling . 正确的xpath表达式应该是

    //td[.='X86HZS1']/following-sibling::td[1]
    

    如果要匹配的同一自动测试在表数据中出现多次,则此表达式将匹配所有自动测试,并将返回一个节点集而不是单个节点。

    编辑:一般使用 // 当不需要时,不推荐使用,因为它需要遍历整个文档。使用更直接的路径(如注释中所述),可以得到更有效的xpath表达式。