我很困惑为什么以及如何执行此查询。
我的html结构是这样的(表嵌套在表中):
<root>
<table>
</table>
<table>
<tr>
<td>
<table>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
</root>
如果我像这样开始我的xpath:
var tables = blah.SelectNodes("//table");
返回3个父表,然后我要从第二个tr中选择td,如下所示:
var td = tables[2].SelectNodes("//tr[2]/td");
但是,当我这样做时,它又回到了父级/根级“ blah”级别。为什么会这样,以及如何继续过滤搜索结果呢?
注意:示例xml结构可能不直接匹配编写的查询,只是试图给出一个大致的想法...
只是继续扩展 XPath
这个返回<tr>
第二个表的项目(其中四个):
/table/tr/td/table/tr
这返回第二<tr>
项:
/table/tr/td/table/tr[2]
不过,最好的办法是为id
每个表赋予单独的属性,以便您可以使用该属性直接找到它。
使用这样的东西:
<root>
<table id="1">
</table>
<table id="2">
<tr>
<td>
<table id="3">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
</root>
您可以使用以下命令在最里面的表中获取项目:
//table[@id="3"]
您可以<td>
从最里面的表中获取单个项目,方法是:
//table/tr/td/table/tr[2]/td[1]
分配id
属性会使它变得更简单(请注意/tr/td
第一个之后的缺失项table
):
//table[@id="3"]/tr[2]/td[1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句