获取仅具有给定类的元素的DOMNodeList

时间:2016-03-25 13:17:13

标签: php html web-scraping domdocument

我正在使用PHP DOMDocument和DomXPath解析第三方HTML页面。 我使用以下代码:

$dom = new DOMDocument();
$html = file_get_contents($url);
$dom->loadHTML('<?xml encoding="UTF-8">' . $html);
$dom->encoding = "UTF-8";
$finder = new DomXPath($dom);

现在有几个元素使用相同的类,但我想定位使用给定类的元素,例如:

<table class="tbl"></table>
<table class="tbl red"></table>
<table class="tbl large blue"></table>

我使用以下选择器:

$classname = "tbl";
$nodes = $finder->query("//*[contains(@class, '$classname')]");

当然,取出上面给出的所有三个表格。有没有一种简单的方法来获得第一个? 感谢

1 个答案:

答案 0 :(得分:1)

是的,有办法。

请注意,使用XPath查询,您可以通过以下方式访问所需的节点:

$nodes->item(0);

要仅选择第一个节点,您必须以这种方式修改模式:

$nodes = $finder->query("(//*[contains(@class, '$classname')])[1]");

但是要访问所需的节点,无论如何都需要使用这种语法:

$nodes->item(0);