Поиск количества узлов в PHP, DOM, XPath
Я загружаю HTML в DOM, а затем запрашиваю его с помощью XPath в PHP. Моя текущая проблема заключается в том, как узнать, сколько совпадений было сделано, и как только это будет установлено, как мне получить к ним доступ?
В настоящее время у меня есть это грязное решение:
$i = 0;
foreach($nodes as $node) {
echo $dom->savexml($nodes->item($i));
$i++;
}
Есть ли более чистое решение для поиска количества узлов, я попробовал count(), но это не работает.
Ответы
Ответ 1
Вы не разместили какой-либо код, относящийся к $nodes
, поэтому я предполагаю, что вы используете DOMXPath и query(), или, по крайней мере, у вас есть DOMNodeList.
DOMXPath:: query() возвращает DOMNodeList, который имеет член длины. Вы можете получить доступ к нему через (с учетом вашего кода):
$nodes->length
Ответ 2
Если вы просто хотите узнать счет, вы также можете использовать 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";