![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2007
Сообщений: 306
|
Мне нужен XML парсер, чтобы парсить тяжелые XML.
Подскажите где достать самый быстрый xml parser Заранее спасибо. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Самый быстрый *— встроенный.
И во что он должен парсить? |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 306
|
в Object было бы неплохо.
XML2Object, например, парсит файл размером 80 кб за 450 мс, а мне мах 250 надо! Нашел прототип, работает быстрее но меньше 300 не получается ![]() XML.prototype.toObject = function ()
{
var $xparse = function (n)
{
var o = new String (n.firstChild.nodeValue), s, i, t
for (s = (o == "null") ? n.firstChild : n.childNodes[1]; s != null; s = s.nextSibling)
{
t = s.childNodes.length > 0 ? arguments.callee (s) : new String (s.nodeValue)
for (i in s.attributes) t[i] = s.attributes[i]
if (o[s.nodeName] != undefined)
{
if (!(o[s.nodeName] instanceof Array)) o[s.nodeName] = [o[s.nodeName]]
o[s.nodeName].push (t)
}
else o[s.nodeName] = t
}
return o
}
return $xparse (this)
}
|
|
|||||
|
Modus ponens
|
Гораздо удобнее было бы похожий метод ХMLNod"у приделать, если уже так сильно нужно. А еще проще - вообще ничего никуда не парсить, ХМЛ сам по себе и так нормально структурирован, зачем усложнять?
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 01.11.2007 в 19:15. |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 306
|
Просто xml файл слишком большой, чтобы его вручную разбирать, а загвоздка в том, что нужен универсальный парсер для тегов и аттрибутов.
|
|
|||||
|
Modus ponens
|
Ну дык ХМЛ - это уже готовый объект с уже написаными, описанными и хорошо работающими свойствами/методами. Зачем его еще во что-то переделывать? А самое главное, что если вы дождались онЛоада, то это значит, что ХМЛ уже 1 раз парсился (получаете-то вы строку, а не ХМЛ)!
Вот, немного переделал код выше, я думаю, что это то, что мешало (длинные имена) а не плохая структура. XMLNode.prototype.__resolve = function(p):Object {
if(!isNaN(p/1)){
return this.childNodes[p];
} else {
return this.attributes[p];
}
}
var myXML:XML = new XML("<node a='0'><sub1 a='1'/><sub1 a='2'/><sub1 a='3'/><sub2 a='4'/><sub2 a='5'/></sub1><sub1 a='6'/></node>");
trace(myXML.childNodes[0].a);
trace(myXML.childNodes[0].childNodes[0].a);
trace(myXML[0][0].a);
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 02.11.2007 в 00:44. |
|
|||||
|
Не совсем по теме...
А как длина имени влияет на скорость кода? |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
<root> <node>value</node> <text>tratata</text> <asdf> <nodeName>name</nodeName> </asdf> </root> После того как перегнали в объект: obj.asdf.nodeName т.е. получается доступ по имени, а не по номеру. Последний раз редактировалось udaaff; 02.11.2007 в 10:17. |
|
|||||
|
Modus ponens
|
Цитата:
Т.е. если вы сможете написать код, который после события onData() ХМЛя выполнится быстрее, чем onLoad() и создаст объект копирующий структуру загруженного ХМЛЯ - я буду вам дико завидовать. =) Но я не верю, что это возможно даже теоретически =) В любом другом случае, на мой взгляд, операция по превращению ХМЛя во что-то другое лишена смысла. А если вас не устраивают названия методов childNodes и attributes - дык, я не думаю, что можно от них "избавиться" более практично, чем это сделано в моем коде... udaaf: А что ты будешь делать, если получишь такой ХМЛ? =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 02.11.2007 в 13:35. |
|
|||||
|
Ветеран форума
Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
|
Вообще idMap рулит, чтобы не нагружать мозг для придумывания оригинальных названий можно иметь одинаковые, но это при условии что вы написали класс обрабатывающий хмл и возвращающий нод в виде хмл объекта, что по сути не представляет большой проблемы. Лично я вижу несколько плюсов в написании такого класса.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|