我很难理解为什么以及如何进行此查询。
我的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个父表,然后我想从第2个tr中选择td:
var td = tables[2].SelectNodes("//tr[2]/td");
但是,当我这样做时,它会回到父/ root,即“blah”级别。为什么会这样,我怎样才能继续过滤我的搜索结果?
注意:示例xml结构可能与写入的查询不直接匹配,只是试图给出一般概念......
答案 0 :(得分:1)
继续扩展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]