Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Ошибка при разборе XML


Автор: AcAlex 26.2.2009, 03:46
Здраствуйте. Задача состоит в разборке xml файла.
Код:
Код

$dom=new DOMDocument;
$dom->load('test.xml');
$xpath=new DOMXPath($dom);
$all=$xpath->query('/items/news');
$i=0;
foreach( $all as $row ) 

            $fn=$xpath->query('newstime',$row);
    $arResult[$i]['newstime']=$fn->item(0)->firstChild->nodeValue;  
    $fn=$xpath->query('headline',$row);
    $arResult[$i]['headline']=$fn->item(0)->firstChild->nodeValue;
    $fn=$xpath->query('announce',$row);
    $arResult[$i]['announce']=$fn->item(0)->firstChild->nodeValue;
    $fn=$xpath->query('body',$row);
    $arResult[$i]['body']=$fn->item(0)->firstChild->nodeValue;
    $i++;
}

В итоге в массиве $arResult должны содержаться все данные, но он после выполнения кода пустой.
Если в xml файле оставлять только первую новость, то он ее заносит в массив, при добавлении в файле еще одной новости массив пуст, хотя в массиве должно находиться уже две новости.
Помогите плиз
Xml файл прикреплен.

Автор: AcAlex 26.2.2009, 12:57
Я нашел причину ошибки - это символ "&#8". Может кто нибудь подскажет что делать в этом случае.
Заранее спасибо.

Автор: skyboy 26.2.2009, 13:45
Цитата(AcAlex @  26.2.2009,  11:57 Найти цитируемый пост)
&#8

это не символ.
корректная сущность, насколько мне известно, это "&#", четыре цифры, определеяющие код символа и ";". все на месте? или у тебя просто "&#"? 

Автор: AcAlex 26.2.2009, 14:26
все на месте ""
опера и ff ругаются.

Автор: skyboy 26.2.2009, 14:37
насчет "четырех цифр" я http://www.w3.org/TR/REC-xml/#sec-predefined-ent.
с другой стороны, а зачем тебе непечатаемый символ с кодом "8", если выводимые символы начинаются с "32"? Возможно, дело именно в этом.

Автор: AcAlex 26.2.2009, 15:05
Да дело было в символе, но убрать я его не мог. Проблема решилась путем заключения содержимого поля BODY в
CDATA секцию.
skyboy  спасибо за внимание  smile .

Автор: skyboy 26.2.2009, 15:37
Цитата(AcAlex @  26.2.2009,  14:05 Найти цитируемый пост)
путем заключения содержимого поля BODY в
CDATA секцию

радикально.
а найти и заменить перед выдачей клиента - слишком сложно?

Автор: AcAlex 26.2.2009, 21:27
Цитата

радикально.
а найти и заменить перед выдачей клиента - слишком сложно?

не понял, я беру xml с другого сервера.

Автор: skyboy 26.2.2009, 23:06
и? берешь, заменяешь как в обычном тексте, кормишь парсеру. или у тебя другая последовательность действий?

Автор: AcAlex 27.2.2009, 00:42
я понял, но уже сделал как сказал выше

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)