Ошибка XML: > required. Проблема в xml_parse

Max[storm]

Новичок
Ошибка XML: > required. Проблема в xml_parse

ДОбрый вечер гуру и не очень.... прокопался весь день по форумам и мануалам... но так и не смог найти решение, так что решил прибегнуть к последней инстанции.... пишу сюда.

Пример xml файла:

<?xml version="1.0"?>
<some_xml_tg>
<object something="1">A1</object>
<object something="2">A2</object>
</some_xml_tg>

-----------------------------------------------------------------------------------------------
Разбираю xml файл таким образом:
-----------------------------------------------------------------------------------------------
$parser = xml_parser_create();
xml_set_element_handler($parser,'saxStartElement','saxEndElement');
xml_set_character_data_handler($parser,'saxCharacterData');

xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);

$xml_array = file ('Адрес файла на http сервере');

$finish = false;
for ($i=1; $i < count ($xml_array); $i++)
{
if (count ($xml_array) == ($i + 1)) $finish = true;
$xml = $xml_array[$i];
if (!xml_parse ($parser, $xml, $finish))
die(sprintf('Ошибка XML: %s в строке %d',
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
-----------------------------------------------------------------------------------------------
Проблема заключается в следующем: если содерижмое xml файла не большое (элементов object не много, не больше 100), то все прекрасно работает. Но как только содержимое файла превышает 1000 элементов, то возникает следующая ошибка:

Ошибка XML: > required в строке 168

Номер строки может меняться, если варьировать объем xml файла. проблема, на сколько я понял, кроится в xml_parse ()..... но почему это возникает и как с этим бороться - не понимаю. Для справки - на домашней машине стоит Денвер.
 

slach

Новичок
ну вообще то тебе ЧЕТКО написали
что у тебя XML не правильный, почитай в инете что такое not-well-formed XML



открой 'Адрес файла на http сервере' в MSIE
или в Файрфоксе оно подсветит где ошибка

еще есть такие волшебные утилиты как xmlwf и xmlllint
 

Max[storm]

Новичок
Открыл в MSIE, открыл в FireFox - ошибок не выдает...

просто немного модифицируя код у меня чаще всего возникала ошибка - Empty Document (Хотя документ совсем не Empty и xml_parse тоже получает не пустые данные). Мне кажется, что проблема может быть с перезаполнением какой-нить памяти при выполнении xml_parse (использую Денвер, возможно в нем какая-то из ), потому что небольшой документ обрабатывает без проблема, а большие - нет).
 

slach

Новичок
нет проблема не в "переполнении памяти"
тебе тупо сказали
у тебя не well formed документ

"> required в строке 168"

строка 168 это строка XML документа
тебе слово required о чем нибудь говорит??

символа у тебя там нету нужного возможно идет какая нибудь лажа типа

<tag attribute="test"<tag2></tag2></tag>
 

Max[storm]

Новичок
Да говорю же xml в порядке... там такой формат:

<?xml version="1.0"?>
<some_xml_tg>
<object something="1">A1</object>
<object something="2">A2</object>
............................................................
<object something="1">A1</object>
<object something="2">A2</object>
</some_xml_tg>

Номер строки ошибки НЕ ЗАВИСИТ от содержимого строки. ПОтому что удаляю элементы, например, с 300 до 500 строки и номер ошибки строки становится 790 (то есть строка 168 проскакивает как нормальная), так что проблема не в xml файле.

Содержимое xml документа - это просто дублиирование
<object something="1">A1</object>
 

Max[storm]

Новичок
Вот ссылка на этот файл... http://mx-tech.org/max/qwerty.xml после небольших изменений в его структуре (файл тестовый) ошибка перебралась в 230 строку)))

Ошибка XML: > required в строке 230

Но, если посмотреть внимательней, то все-таки будет понятно, что проблема не в xml файле (сейчас все строки одинаковы).

Почему возникает проблема - не ясно..

-~{}~ 05.03.09 01:26:

Еще больше вводит в ступор то, что протестил на серваке - все хорошо работает.... Так что домысел по поводу проблем с памятью - в силе.
 

FB3

Новичок
Z:\home\localhost\www>php -v
PHP 5.2.4 (cli) (built: Oct 1 2007 20:06:42)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with Zend Core v2.5.0, Copyright (c) 1998-2006, by Zend Technologies
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2006, by Zend Technologies
with Zend Optimizer v3.3.1, Copyright (c) 1998-2007, by Zend Technologies
with Zend Debugger v5.2.10, Copyright (c) 1999-2007, by Zend Technologies

На вот этой версии PHP скрипт срабатывает, но в логе много ворнингов типа:
[05-Mar-2009 18:19:32] PHP Warning: xml_parse(): Unable to call handler saxEndElement() in Z:\home\localhost\www\xml.php on line 15
 

Max[storm]

Новичок
ОТлично)) смотри - я обновил php до версии 5.2.9 и проблема исчезала)

На вот этой версии PHP скрипт срабатывает, но в логе много ворнингов типа: [05-Mar-2009 18:19:32] PHP Warning: xml_parse(): Unable to call handler saxEndElement() in Z:\home\localhost\www\xml.php on line 15
а ты у себя объявил эти функции? я же просто их не выкладывал. Если хочешь - возми просто эти заглушки

function saxStartElement($parser, $name, $attrs)
{
}

function saxEndElement($parser, $name)
{
}

function saxCharacterData($parser, $data)
{
}
 

FB3

Новичок
Ну да, не объявил :)
Обновил - заработало - это хорошо. Можешь теперь баг на сайте php поискать и запостить сюда, на будущее :)
 
Сверху