2013-02-16 6 views
0
$file = simplexml_load_file($url); { 


    foreach($file->entry as $post) { 


    $row = simplexml_load_string($post->asXML()); // after adding this line, i get error message 

    $links = $row->xpath('//link[@rel="alternate" and @type="text/html"]'); 
    echo (string) $post->title; 
    echo (string) $links[0]['href']; 

Я использую этот скрипт для синтаксического анализа. Сначала это не сработало, потому что он не мог правильно передать атрибут href ссылки. Я добавил $row, и хотя он сработал, он дает ошибку: «префикс пространства имен gd для etag при записи не определен». Я ищу это часами, не могу найти решение. Я был так близко.xml parsing error, используя php's asxml()

ответ

0

Линия $row = simplexml_load_string($post->asXML());, если это сработает, было бы длинным способом написания $row = $post. ->asXML() и simplexml_load_string выполняют противоположное действие друг к другу, чтобы вы вернули тот же объект, с которого вы начали.

Я думаю, что причина, по которой это странно ведет себя в вашем случае, заключается в том, что ваш XML-документ использует «пространства имен», а фрагмент XML, созданный $post->asXML(), не совсем работает как XML-документ сам по себе.

Я подозреваю, что исходная проблема, с которой эта линия, казалось, волшебным образом исправилась, также была связана с пространствами имен, поскольку XPath довольно чувствителен к ним. Посмотрите примеры использования registerXPathNamespace и посмотрите, не решают ли они вашу проблему. Если нет, не стесняйтесь публиковать следующий вопрос, показывающий вашу первоначальную проблему, и в том числе образец XML, который вы обрабатываете.