2009-07-13 5 views
12

Я загружаю HTML в DOM, а затем запрашиваю его с помощью XPath в PHP. Моя текущая проблема заключается в том, как узнать, сколько совпадений было сделано, и как только это будет установлено, как мне получить к ним доступ?Поиск количества узлов в PHP, DOM, XPath

настоящее время у меня этот грязный раствор:

$i = 0; 
foreach($nodes as $node) { 
    echo $dom->savexml($nodes->item($i)); 
    $i++; 
} 

Есть ли чистое решение, чтобы найти число узлов, я попытался счетчик(), но это не работает.

ответ

27

Вы не разместили ни одного кода, относящегося к $nodes, поэтому я предполагаю, что вы используете DOMXPath и query(), или, по крайней мере, у вас есть DOMNodeList.
DOMXPath :: query() возвращает DOMNodeList, который имеет член длины. Вы можете получить доступ к нему с помощью (учитывая ваш код):

$nodes->length 
1

Если вы просто хотите знать количество, вы можете также использовать DOMXPath::evaluate.

Пример из PHP Manual:

$doc = new DOMDocument; 
$doc->load('book.xml'); 
$xpath = new DOMXPath($doc); 
$tbody = $doc->getElementsByTagName('tbody')->item(0); 

// our query is relative to the tbody node 
$query = 'count(row/entry[. = "en"])'; 
$entries = $xpath->evaluate($query, $tbody); 
echo "There are $entries english books\n"; 
Смежные вопросы