2016-03-25 2 views
0

Я анализирую стороннюю HTML-страницу с помощью PHP DOMDocument и DomXPath. Я использую следующий код:Получить DOMNodeList элементов только с данным классом

$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')]"); 

Который, конечно, извлекает все три таблицы, приведенные выше. Есть ли простой способ получить только первый? Thanks

+0

Почему вы загружаете HTML с объявлением xml? – fusion3k

+0

Кстати, вы можете использовать этот шаблон: '(// * [contains (@class, '$ classname)])) [1]' – fusion3k

ответ

1

Да, есть способ.

Обратите внимание, что с помощью XPath запроса вы можете получить доступ к требуемому узлу таким путем:

$nodes->item(0); 

Чтобы выбрать только первый узел, вы должны изменить свой шаблон таким образом:

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

Но для доступа к нужному узлу вам все равно нужно использовать этот синтаксис:

$nodes->item(0); 
Смежные вопросы