大家好。
我手边有一个相当复杂的问题..
我有一张这样的表:
姓名|结果| AutotestID | AutotestResult | AutotestName
X |通过| X86HZS1 | | |
所以...我想做的是以下内容。我只知道身份证。我想从自动测试中更新AutotestResult。这是空的开始。
我正在尝试找到ID ...我有。但是当我有ID时,我必须更新旁边的行。我怎么做?我试过玩xPath。使用../../../td etcetc向后退,但没有运气。
我似乎无法找到它的邻居表......
有人可以指出我正确的方向吗?
非常感谢您的帮助!
汉尼拔答案 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)
除了jasso对following-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]