PDA

Просмотр полной версии : XML+PHP: проблема загрузки данных


Offi
29.09.2008, 23:24
Здравствуйте!
Есть видео-галлерея, которая подгружает список категорий и непосредственно файлов из XML-документа. Локально, подгрузка данных из file.xml , успешно проходит и ролик обрабатывает данные. На сервере php-скрипт генерирует XML-файл, заполняя его данными из mysql-базы. При загрузке данных с сервера из генерируемого документа ролик не хочет обрабатывать данные. Думал, что некорректно генерируется хмл-файл, но сохранение полученных с сервера данных в file.xml показало, что документ корректно загружается и обрабатывается локально. При запуске ролика из среды разработки и загрузке данных с сервера используя Debug/List variables обнаружил, что файл был загружен в ролик, но данные обрабатыватся не стали :(

Код загрузки данных:

var path = "http://mysite.ru/video/xml.php";
var myxml = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(success)
{
var cats = this.firstChild.childNodes;
if (success)
{
for (var n:Number = 0; n < cats.length; n++)
{
trace(cats[n].attributes.name); // выдает - undefined
}
}
}


Код http://mysite.ru/video/xml.php:

<?
require('mysql.php');
// $data - массив с данными из базы
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<VideoLibrary>';
for ($i = 0; $i < count($data); $i++)
{
echo '<category name="'.$data[$i][0][0].'">';
for ($j = 1; $j < count($data[$i]); $j++)
{
echo '<list name="'.$data[$i][$j]['name'].'"></list>';
}
echo '</category>';
}
echo '</VideoLibrary>';
?>


Возможно кто-то знает, что за грабли, подскажите пожалуйста!

dimarik
29.09.2008, 23:49
1. Покажите результат работы скрипта в виде XML.
2. В личку скиньте адрес удаленного сервера и путь к скрипу. Попытаюсь проанализовать ответ сервера.

Offi
30.09.2008, 00:42
Добавил в пхп-файл вначале:
<?
header('Content-type: application/xml; charset="utf-8"',true);
...


теперь при просмотре полученных данных через Оперу вылазит ошибка
XML parsing failed: syntax error (Line: 1, Character: 0)

Reparse document as HTML
Error:unexpected text (non-whitespace text outside root element)
Specification:http://www.w3.org/TR/REC-xml/
и красным цветом показывает что перед <?xml version="1.0" encoding="utf-8"?> есть пробел! но в коде пхп-файла нет вывода никаких знаков до этой строчки и до символов "<?"...

dimarik
30.09.2008, 01:09
там не пробел а последовательность символов (скопировано из UltraEdit в HEX режиме):
00000000h: FF FE 3F 04 BB 00 57 04 3F 04 BB 00 57 04 3C 00 ; яю?.».W.?.».W.<.
00000010h: 3F 00 78 00 6D 00 6C 00 20 00 76 00 65 00 72 00 ; ?.x.m.l. .v.e.r.
00000020h: 73 00 69 00 6F 00 6E 00 3D 00 22 00 31 00 2E 00 ; s.i.o.n.=.".1...
00000030h: 30 00 22 00 20 00 65 00 6E 00 63 00 6F 00 64 00 ; 0.". .e.n.c.o.d.
00000040h: 69 00 6E 00 67 00 3D 00 22 00 75 00 74 00 66 00 ; i.n.g.=.".u.t.f.
00000050h: 2D 00 38 00 22 00 3F 00 3E 00 3C 00 56 00 69 00 ; -.8.".?.>.<.V.i.

Update
Мой IE7 закрывается сразу после попытки открыть сохраненные результаты ответа от Вашего скрипта. У Firefox вопросов не возникает и открывает xml корректно. При открытии с Вашего сайта IE7 говорит об ошибке парсинга xml на строке:

Ошибка в элементе верхнего уровня документа. Ошибка при обработке ресурса ''http://zzzzzzz/new/post/video/xml.php...

<?xml version="1.0" encoding="utf-8"?><VideoLibrary><category name="VFX"><list name="Toxic" videotitle...

Update2
Локальный файл flash-ролик парсит корректно. Удаленный файл не парсит, но данные получает, поставьте трейс и увидите:
var path = "http://zzzzzzz/new/post/video/xml.php";
var myxml = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(success) {
var cats = this.firstChild.childNodes;
if (success) {
trace('doc: '+ this)
}
}
//myxml.load("Edit1.xml");
myxml.load(path);

Мой вывод: забиваю на свой IE7, а Вы избавляетесь от паразитных символов в начале ответа сервера.

etc
30.09.2008, 02:46
Похоже на DOM-метку, только она тут раза три повторяется.

Molecula
30.09.2008, 03:01
Похоже на BOM метку.
Сохраняйте файл, как "UTF-8 without BOM", можно использовать HTMLPad или WeBuilder, или другое.

Offi
30.09.2008, 21:38
Сохраняйте файл, как "UTF-8 without BOM"
сделал. непомогло. Но! в пхп-файл который генерировал хмл инклудился файл-класс обеспечивающий доступ к данным из базы. перекодировал его в UTF-8 without BOM и все заработало! :)
Спасибо всем кто отозвался!

GoodWin74
29.07.2009, 11:11
с PHP тож проблемка! Не могу понять как загрузить XML через Переменную.
т.е. в переменной $xml у меня лежит текст из нормальной XML-ки пробовал прям её разбирать $xml->text[0]; не катит...
Может её както самому парсить надо или как??? тектс примерно такой:


<?xml version="1.0" encoding="utf-8"?>
<general>
<text>502</text>
</general>

Mnilionic
29.07.2009, 11:19
вам в PHP раздел.
для работы с XML в PHP есть библиотеки.