Нахождение количества узлов в PHP, DOM, XPath - PullRequest
12 голосов
/ 13 июля 2009

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

У меня сейчас есть грязное решение:

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

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

Ответы [ 2 ]

28 голосов
/ 13 июля 2009

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

$nodes->length
1 голос
/ 24 июня 2010

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

Пример из руководства по PHP:

$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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...