我正在尝试使用XPath
访问Dom的特定元素这是一个例子
<table>
<tbody>
<tr>
<td>
<b>1</b> <a href="http://www.url.html">data</a><br>
<b>2</b> <a href="http://www.url.html">data</a><br>
<b>3</b> <a href="http://www.url.html">data</a><br>
</td>
</tr>
</tbody>
</table>
我想定位“table td”,所以我在Xpath中的查询类似于
$finder->query('//table/td');
只有这不会将td作为子子项返回,并且使用
进行直接访问$finder->query('//tr/td');
有没有更好的方法来编写查询,这将允许我使用类似第一个示例忽略中间元素并返回TD的内容?
答案 0 :(得分:5)
是否有更好的方法来编写允许我使用的查询 像第一个例子那样忽略中间和之间的元素 返回TD?
你可以写:
//table//td
然而,这真的“更好”吗?
在许多情况下,对XPath 伪运算符 //
的评估可能导致显着的低效率,因为它会导致遍历上下文节点的整个子树被遍历。
每当静态知道所需节点的路径时,用特定的已知路径替换任何//
可能更有效,从而避免完整的子树遍历。
对于提供的XML文档,此类表达式为:
/*/*/tr/td
如果有多个table
元素,每个元素都是top元素的子元素,我们只想选择forst td
的{{1}},这是一个很好的特定表达式是:
table
如果我们只想选择同一文档中第一个/*/table[1]/*/tr/td
的第一个td
,最好这样做:
table
或者如果我们想要选择XML文档中的第一个(/*/table[1]/*/tr//td)[1]
(事先不知道它的结构),那么我们可以指定:
td
答案 1 :(得分:1)
哦,男孩哦,男孩,经常看不到的东西 至于你的第一个xpath查询,你可以只返回你想要的,但在标记名之前使用double // on
但是,我不明白为什么你不只是想通过标记名来获取td ...
答案 2 :(得分:1)
您正在寻找的是:
$finder->query('//table//td');
答案 3 :(得分:1)
您也可以这样写: -
$finder->query('//td');