[xpath]需要帮助获取另一个表格行的xpath

时间:2010-07-08 21:54:10

标签: xpath

编辑:为什么这被否决?我真的不知道...... BTW ../不起作用,因为我不想要表的父级但实际上想要../td+1我不知道这是否可能?

大家好。

我手边有一个相当复杂的问题..

我有一张这样的表:

姓名|结果| AutotestID | AutotestResult | AutotestName

X |通过| X86HZS1 | | |

所以...我想做的是以下内容。我只知道身份证。我想从自动测试中更新AutotestResult。这是空的开始。

我正在尝试找到ID ...我有。但是当我有ID时,我必须更新旁边的行。我怎么做?我试过玩xPath。使用../../../td etcetc向后退,但没有运气。

我似乎无法找到它的邻居表......

有人可以指出我正确的方向吗?

非常感谢您的帮助!

汉尼拔

2 个答案:

答案 0 :(得分:1)

您的问题尚不清楚,但我正在做一些猜测,并假设您有一个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表达式,该表达式选择包含文本“X86HZS1”(AutotestID)之后的下一个<td>元素。要查找具有特定文本内容的节点,您可以使用谓词以及使用轴following-sibling按文档顺序显示在此节点之后的兄弟元素。适当的XPath表达式将是

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

如果您匹配的相同AutotestID在表数据中多次出现,则此表达式与所有表达式匹配,并返回节点集而不是单个节点。

编辑:一般不建议在不需要时使用//,因为它需要遍历整个文档。使用更直接的路径(如注释中所述)可以获得更高效的XPath表达式。

答案 1 :(得分:1)

除了jassofollowing-sibling轴的良好推荐外,该答案还存在一些问题:您必须修复td是否为自动标识。

所以,知道表格'schema:

<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]

如果您不知道AutotestID位置,可以使用:

/table/tr/td[count(../../tr/td[.='AutotestID']/preceding-sibling::td)+1]
            [.='X86HZS1']/following-sibling::td[1]