我正在使用以下XPath搜索:
getNodeSet(doc, "//img[@src = './images/min_es.gif']/../../following-sibling::tr")
结果是<tr>
包含两个表(一个在另一个中),所以:
<tr valign="top"><td height="163">
<table width="128" border="0" cellspacing="0" cellpadding="0" height="163"><tr valign="top"><td width="96">
<table width="126"><tr><td width="65%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
Microclina</font></td>
<td width="35%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
~40 %</font></td>
</tr><tr><td width="65%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
Quartzo</font></td>
<td width="35%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
~29 %</font></td>
</tr><tr><td width="65%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
Plagioclase</font></td>
<td width="35%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
~20 %</font></td>
</tr><tr><td width="65%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
Biotite</font></td>
<td width="35%" valign="top"><font size="1" face="Arial, Helvetica, sans-serif">
~10 %</font></td>
</tr></table></td>
</tr></table></td>
</tr>
现在我想访问内部表。要做到这一点,我尝试过:
getNodeSet(doc, "//img[@src = './images/min_es.gif']/../../following-sibling::tr//table")
给出了所有表的列表(在这种情况下是上面的两个表,其中一个表有两个表)。
我也尝试过:
getNodeSet(doc, "//img[@src = './images/min_es.gif']/../../following-sibling::tr//table/table")
这对我一无所获。我尝试了很多这样的变化:
getNodeSet(doc, "//img[@src = './images/min_es.gif']/../../following-sibling::tr[1]/.//table/table")
但我无法进入难以捉摸的内心表。
谁能告诉我怎么样?任何参考文献赞赏。
答案 0 :(得分:1)
这里的问题是,当你似乎不明白它的作用时,你会随意地投掷//
。
path//table
表示“在tables
下方选择所有path
。这就是为什么在您尝试时选择所有表格的原因。您应该使用的是:
//img[@src = './images/min_es.gif']/../../following-sibling::tr/table/tr/td/table
或
//img[@src = './images/min_es.gif']/../../following-sibling::tr/table//table
第一个意味着:
//img[@src = './images/min_es.gif']/../../following-sibling::tr
选择tr
/table
选择table
的所有tr
个孩子。
/tr
选择tr
个孩子的任何table
。
/td
选择td
个孩子的任何tr
。
/table
选择table
个孩子的任何td
。
在第二个例子中,我们有:
/table
选择table
所选的任何tr
个孩子。
//table
选择任何低于table
的任何表格。
答案 1 :(得分:0)
我已经解决了这个问题。好像我还没有完全理解XPath。解决方案是
`getNodeSet(doc, "//img[@src = './images/min_es.gif']/../../following-sibling::tr//table//table")`
每当查询返回一个或多个元素时,您必须使用&#34; //&#34;在答案集上匹配。