PDA

Просмотр полной версии : Странный парсер XML


in4core
16.07.2010, 14:24
Получаем списочек друзьев XML из вконтакте.

Пример ( начало)
str =
<?xml version='1.0' encoding='utf-8'?><response list='true'> <user> <uid>8311</uid> <first_name>Aleksey</first_name> <last_name>Souetov</last_name> <photo_medium>http://cs9438.vkontakte.ru/u08311/b_4e3bd94d.jpg</photo_medium> <online>0</online> </user> <user> <uid>48114</uid> <first_name>Gl</first_name> <last_name>All</last_name> <photo_medium>http://cs9653.vkontakte.ru/u48114/b_525adfad.jpg</photo_medium> <online>0</online> </user> <user> <uid>57693</uid> <first_name>Koshkin</first_name> <last_name>Spiel</last_name> <photo_medium>http://cs729.vkontakte.ru/u57693/b_87f4c860.jpg</photo_medium> <online>0</online> </user> </response>

var xm = new XML(str.split("\n").join(""))

var x = xm.firstChild.childNodes;

trace(x); /*

,<user> <uid>8311</uid> <first_name>Aleksey</first_name> <last_name>Souetov</last_name> <photo_medium>http://cs9438.vkontakte.ru/u08311/b_4e3bd94d.jpg</photo_medium> <online>0</online> </user>, ,<user> <uid>48114</uid> <first_name>Gl</first_name> <last_name>All</last_name> <photo_medium>http://cs9653.vkontakte.ru/u48114/b_525adfad.jpg</photo_medium> <online>0</online> </user>, , <user>...................... */

Откуда взялись запятые? не могу понять!!! Это первый вопрос

Второй вопрос почему:
trace(x.split(",").join("")) // undefined

etc
16.07.2010, 14:36
childNodes какой тип имеет?

in4core
16.07.2010, 14:50
Это на какой вопрос ?

Добавлено через 1 минуту
еслми об этом то :

trace(typeof(xm.firstChild.childNodes)) == object

etc
16.07.2010, 14:58
Вообще-то Array.

in4core
16.07.2010, 15:06
Ну Array это и есть по сути инстанс объкекта. Только это к чему? Что делать с запятыми ? почему такой xml получается непонятный? как его правильно парсить и т.д. не могу понять, первый раз с xml проблема за всю жизнь

Хемуль
16.07.2010, 15:08
2 in4core:
Вы что, никогда не трейсили массивы? ^_^
Запятые разделяют элементы массива для наглядности, в результате работы trace.

etc
16.07.2010, 15:10
Угу, а элементами массива являются XMLNode. И непонятно, зачем вы пытаетесь вызвать split у массива, у него нет такого метода, это метод String-а.

in4core
16.07.2010, 15:11
Это все понятно. Вопрос был как верно парсить такой XML . Чтобы в итоге push в массивы nodeValue

etc
16.07.2010, 15:12
Откройте в кои-то веки доку по childNodes.

in4core
16.07.2010, 15:22
Разобрался. Правда убить их мало за пробелы оставляемые между нодами. пришлось чистить

udaaff
16.07.2010, 15:34
ignoreWhite в помощь.

in4core
16.07.2010, 15:36
Игнор вайт срабатывает тока при onLoad как я понял. тут он не помог к сожалению. потому что данные я получаю ввиду строки. А сделать сплит поначалу не могу, поскольку в firstChild есть аттрибут. Приходится сначала вытягивать childNodes потом переводит в строку потом тока резать пробелы, и снова загонять в XML.... ужас

Добавлено через 1 минуту
И вот еще загвоздочка появилась

trace(xm1.childNodes[0].childNodes[0]) // <uid>4444</uid>
trace(xm1.childNodes[0].childNodes[0].nodeName) // uid
trace(xm1.childNodes[0].childNodes[0].nodeValue) // null - почему ?

etc
16.07.2010, 15:39
Потому что .firstChild.nodeValue. Число — тоже нод, только текстовый.

А ignoreWhite помогает всем. Почему у вас с ним проблемы, непонятно.

Хемуль
16.07.2010, 15:41
Игнор вайт срабатывает тока при onLoad как я понял. тут он не помог к сожалению. потому что данные я получаю ввиду строки.
А, вы решили парсить XML вручную и получаете его текст на onData?

in4core
16.07.2010, 15:41
Разобрался )))

Добавлено через 1 минуту
Нет я получаю не на он дата ни на он лоад. Я получаю XML ввиду строки по loadVars
и ответ new XML(result_of_loadVars)

Добавлено через 2 минуты
Всем спасибо. особенно etc открыл глаза на мир)))

etc
16.07.2010, 15:44
А нафиг LoadVars? За каким хреном такие извращения, если XML умеет сам грузиться?

Хемуль
16.07.2010, 15:47
А нафиг LoadVars? За каким хреном такие извращения, если XML умеет сам грузиться?
Наверное, хотелось посылать переменные на сервер через POST. ^_^

in4core
16.07.2010, 15:48
Секундочку. может я что то туплю конечно, но каким образом я по твоему буду грузить XML если метод friends.get получается тока при отправке данных на сервер в контакте, а в ответ соот приходит XML. Или я как бы ясновидящий чтобы знать СЕКРЕТНЫЙ урл своего XML чтобы скачать его с http ?)) Или я чето не понимаю и есть способы удобнее? А я вот опять ниче не знаю и посылаю запросы на сервер почем зря!

Добавлено через 1 минуту
to хемуль - пост или гет не влияет в данный момент ни на что. Ответ всегда приходит один

Хемуль
16.07.2010, 15:51
2 in4core:
myXML.load("http://mysite.com/my_xml.php?var1=value1&var2=value2");

in4core
16.07.2010, 15:56
Вот опять просто все.... а я туплю ) Ленин форева. спасибо