2017-01-06 4 views
0

Я пытаюсь разобрать xml-файл с использованием класса DOMXPath в PHP, но я получаю некоторые ошибки при выполнении запросов. Мой XML есть что-то вроде этогоОшибки запроса в DOMXPath

XML

<?xml version="1.0" encoding="UTF-8"?> 
<news><new><title><!CDATA[bla bla bla]]></title><content><!CDATA[<p>bla bla bla</p>]]></content></new></news> 

DOMXPath

$xml = new DOMDocument(); 
$xml->load($filename); 
$xpath = new DOMXPath($xml); 

$news = $xpath->query('//news'); 

в $ Длина новости всегда 0, и новости тегов существует в XML-файле.

Что я делаю неправильно?

С уважением,

Ismael.

ответ

1

Проверьте это:

Я изменил некоторые из кода:

<?php 
    $doc = new DOMDocument; 

    // We don't want to bother with white spaces 
    $doc->preserveWhiteSpace = false; 

    $doc->Load('book.xml'); 

    $xpath = new DOMXPath($doc); 
    // We starts from the root element 
    $query = '//news'; 

    $news = $xpath->query($query); 
    print_r($news); 

?> 

Я получаю значение длины 1

book.xml

<?xml version="1.0" encoding="UTF-8"?> 
<news><new><title>adsds</title><content>asdsa</content></new></news> 
+0

Вы сделали то же самое, что и я ... Вы удалили тэг CDATA, поэтому у него были ошибки. – Shirraz

+0

@Shirraz: ошибка 'object value omitted', которую я получаю из-за тега' CDATA'. –

+0

Да, потому что его CDATA искажен ... вот почему я «упростил» его так же, как и вы, а затем все просто работало по назначению ... Тэг CDATA - проблема здесь, а не запрос (помимо запроса «всех корневой тег ") ... – Shirraz

1

Обратите внимание, что вы запрашиваете корневой тег («новость»), что несколько бесполезно, поскольку на каждый файл XML есть только один корневой тег. Фактически, вы запрашиваете то же самое, что и query('/news'), длина которого всегда будет «1».

Для вашей проблемы обратите внимание на то, что ваш CDATA неисправен. Это <![CDATA[blah blah blah]]>, а не <!CDATA[bla bla bla]] (отсутствует кронштейн до CDATA).

Это работает

<?xml version="1.0" encoding="UTF-8"?> 
<news> 
    <new><title><![CDATA[<p>bla bla bla</p>]]></title><content><![CDATA[<p>bla bla bla</p>]]></content></new> 
    <new><title><![CDATA[<p>bla bla bla</p>]]></title><content><![CDATA[<p>bla bla bla</p>]]></content></new> 
    <new><title><![CDATA[<p>bla bla bla</p>]]></title><content><![CDATA[<p>bla bla bla</p>]]></content></new> 
</news> 

PHP скрипт

<?php 
$xml = new DOMDocument(); 
$xml->load('./test.xml'); 
$xpath = new DOMXPath($xml); 

$news = $xpath->query('//new'); 

var_dump($news->length); 

Прекрасно возвращает "3".

+0

Внутри ' 'У меня есть' 'теги, если я делаю' query ('// new') 'также я получаю length = 0. –

+0

обновил мой ответ, сначала я заменил ваши CDATA на простые строки ... Плохая идея, я пропустил ваш неправильный тег;) Вот почему это сработало для меня сначала;) – Shirraz

Смежные вопросы