Почему не работает DOMXPath? - PullRequest
       34

Почему не работает DOMXPath?

1 голос
/ 18 декабря 2009

Я пытался написать PHP-скрипт для анализа XML-документа, используя DOMXPath ; однако кажется, что я что-то упускаю, потому что ни один из моих запросов XPath ничего не возвращает. Итак, я попытался записать свой сценарий, чтобы попытаться проанализировать очень элементарный XML-документ, и это тоже не работает. Я основал этот скрипт на этом примере XPath .

<?php

$xml  = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<bookstore>';
$xml .= '<book category="COOKING">';
$xml .= '<title lang="en">Everyday Italian</title>';
$xml .= '<author>Giada De Laurentiis</author>';
$xml .= '<year>2005</year>';
$xml .= '<price>30.00</price>';
$xml .= '</book>';
$xml .= '</bookstore>';

$dom = new DOMDocument('1.0');
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$result = $xpath->query('/bookstore/book[1]/title');
var_dump($result);

?>

Проблема в том, что моя переменная var_dump $ result всегда возвращает что-то вроде:

object(DOMNodeList)#4 (0) { }

... означает, что ничего не найдено.

Ответы [ 2 ]

5 голосов
/ 18 декабря 2009

В этом случае вывод var_dump () вводит в заблуждение. Попробуйте

foreach($result as $e) {
  echo $e->nodeValue;
}

или

echo $result->length;

вместо.

например. используя ваш код (до $ result = $ xpath ....) +

echo phpversion(), "\n";
var_dump($result);
echo $result->length, "\n";
foreach($result as $e) {
  echo $e->nodeValue;
}

вывод

5.3.1
object(DOMNodeList)#4 (0) {
}
1
Everyday Italian
0 голосов
/ 10 января 2014

Я боролся с документом, который указывает xmlns = "http://www.w3.org/2005/Atom" в корневом узле. Вынул его, и xpath работает.

...