2009-12-18 4 views
1

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

<?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 в $ результат всегда возвращает что-то вроде:

object(DOMNodeList)#4 (0) { } 

... показывая, что он ничего не нашел.

ответ

5

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

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

или

echo $result->length; 

вместо этого.

например. не используя код (вплоть до $ результата = $ ....) 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

Упс. Моя ошибка предполагала, что var_dump покажет мне что-то. Спасибо! – SoaperGEM

0

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