![]() |
XML 2 Object
Вложений: 1
сделал я большим потом и кровью функцию:
function xml2Object(src) { var xmlObject = {}; var xmlSrc = new XML(); xmlSrc.ignoreWhite = true; xmlSrc.onLoad = function() { xmlObject = parse(xmlSrc.firstChild.firstChild, xmlObject); xmlObject._src = src; if (xmlSrc.firstChild.nodeName != null) { xmlObject._fcname = xmlSrc.firstChild.nodeName; } if (xmlSrc.firstChild.nodeValue != null) { xmlObject._fcvalue = xmlSrc.firstChild.nodeValue; } if (xmlSrc.firstChild.attributes != null) { xmlObject._fcattributes = new Array(); for (var i in xmlSrc.firstChild.attributes) { xmlObject._fcattributes[i] = xmlSrc.firstChild.attributes[i]; //trace("!!!"+xmlObject._fcattributes[i]); } } //trace(xmlSrc.firstChild.firstChild.nodeType) }; xmlSrc.load(""+src); return xmlObject; } function parse(foo, obj) { var ind; var nName = foo.nodeName.toLowerCase(); var nVal = foo.nodeValue.toLowerCase(); var nAttr = foo.attributes; trace("<"+nName+">-<"+nVal+">-<"+nAttr["attr"]+">"); if (nName != null) { if (obj[nName] != null) { ind = obj[nName].length; obj[nName] = obj[nName].concat({}); trace("<"+nName+">"+obj[nName].length) } else { ind = 0; obj[nName] = [{}]; //trace("<"+nName+">"+obj[nName].length) } } if (foo.nVal != null) { obj[nName][ind]._value = nVal.toString(); //trace(obj[foo.nodeName][ind]._value); } obj[nName][ind]._attributes = []; for (var klop in nAttr) { obj[nName][ind]._attributes[klop] = nAttr[klop].toString(); //trace(obj[foo.nodeName][ind]._attributes[klop]) } if (foo.firstChild != null) { obj[nName][ind] = parse(foo.firstChild, obj[nName][ind]); //trace("obj["+foo.nodeName+"]["+ind+"]") } if (foo.nextSibling != null) { obj[nName][ind] = parse(foo.nextSibling, obj[nName][ind]); } return obj; } var folio = xml2Object("portfolio.xml"); if (folio != null) { trace("_value = "+folio._fcattributes[df]); } _______________________ XML такой: <fst df="dfgdfg"> <item attr="some kind of attribute" attr2="some kind of attribute #2"> <image attr2="It's workin, but badly..."/> <image attr2="It's workin!!!"/> <txt>dfbgdfg</txt> </item> <item attr="some kind of"><txt>1111</txt></item> </fst> _______________________ Но не работает - не увеличивает переменную ind. Крови испорчено - море. помогите, плз. исходник приаттачен. |
Код:
// Constructor |
почему вы стремитесь к сложному взамен простого?
ЗАЧЕМ? объясните, а... 2fiot это всё канеш круто, только я не понимаю зачем оно :)) объясните? столько работы не может быть просто так... 2KidsKilla можешь сформулировать задачу? по-моему это какой-то код-ради-кода. байт-шлак :) |
Nox Noctis
очень хотелось иметь такую штуку как xml в object ... создаёт такую штуку... Код:
_level0.menu = [object #2, class 'XML_2_OBJECT'] {Код:
lang$ = "en"; |
значтак:
делал я функцию для перевода xml в объект для последующего пользования. на выходе должно получиться чето вроде: var someVar = myObjectFromXml.tag[0].attributes["id"] и в someVar окажется к примеру "четотам" если в xml'е написано: <firstTag> <tag id="четотам" /> <tag id="четотам другое" /> </firstTag> вооот... можно, конечно, воспользоваться похожими но другими функциями но там на выходе как правило синтаксис хзкакой. +хочу сам разобраться) да и вообще раз начал... это была предыстория. теперь по поводу моих соображений че там не то: там не обновляется индекс (ind). значит ничего не работает. да и на выходе по-моему один выхлоп. кароче я запутался. |
2 fiot
слу, в принципе это то самое. ток есть несколько вопросов: 1)куда он сует nodeValue => как достать. 2)что он делает с регистром 3)если не сложно, то покажи, как добраться до след. вещей: <firstTag> <item id="Id" /> <txt>какой-то текст</txt> какой-то другой текст </firstTag> а)"какой-то другой текст" б)"какой-то текст" в)"Id" вродь все... я потому и писал свой парсер, что документации по прочим - с гулькин нос... |
то есть вы хотите готовую и понятную структуру ХМЛ при помощи офигенной функции перевести в такую же структуру класса Object?
в чем сверхзадача-то? :) надо сделать чтобы ко всем тегам ХМЛ можно было образаться по имени, да? не проще ли обращаться к хмлу через массивы childNodes? ну ладно, хотите так хотите. 2fiot идея понятна, но, имха, соотношение выделки и овчинки явно не в пользу последней :) 2KidsKilla там бардак у тебя с рекурсией. и с тем что ты проверяешь фолио сразу после того как вызвал загрузку хмал, хотя это бредятина :) и надо разнести загрузку и парсер. вобщем всё переделать :) |
Код:
XMLКод:
ЗЫ. первый тег игнорируется... Nox Noctis Цитата:
|
2 Nox Noctis
tanx, бум смотреть. 2 flot пасиб, но с nodeValue то чего? мне он ну ОООчень нужен. расписывать работы-то надо как то... |
Код:
XML_2_OBJECT.prototype.getValue = function()если тип ноды текс то вертуть валуе елсе не чего ... ЗЫ. а зачем оно тебе сдесь ? у тебя ведь уже объект массив... |
только из любви к искусству :)
(смысла в этом всём я по-прежнему не наблюдаю...) старался сделать близко к тому что пытался сделать ты. Код:
// |
ах да. там косяк происходит с текстовыми нодами. я не очень понял что тебе с ними надо делать, поэтому не стал придумывать. там где ты видишь в парсере проверку на тип ноды надо поставить действия, которые надо произвести если нода текстовая.
|
шпасиба Nox =)
ващето я хочу текстовую ноду запихнуть в св-во _value родительского тега...
во это чето не догоняю ща как замутить... |
вот еще что...
trace(xmlObject) - говорит undefined типа парсер не записал в xmlObject ничего... |
а когда ты трейсишь? :)
сдаётся мне ты трейсишь это дело тогда, когда ХМЛ даже еще не загрузился, не то что не отпарсился... потому и андефайнед. |
исправленный вариант:
Код:
// |
Отдельное спасибо Nox)
ищез на снос винды)
а штука эта всё же полезна если интересно могу объяснить чем)) |
кстати, Nox, я подобным синтаксисом не пользовался.
как передать в функцию parse2Oobject переменную? |
Re: Отдельное спасибо Nox)
Цитата:
|
с переменными разобрался. там другой затык)))
по поводу пользы: эту штуку можно использовать в качестве оотправной точки для создания парсера хтмл(<sup> к примеру) это, правда, более глобальная штука) лично мне это нужно по 2м причинам - 1)весь текст собирается в 1м св-ве 2)гораздо проще узнать сколько определенных тегов в данной ноде. да и вообще на мой взгляд проще использовать obj.item[1].tag[5] чем выискивать стандартными способами. логичнее... |
KidsKilla
чёго то я не понял что ты этим хотел сказать ... Bad Habit нужно для того что бы: преобразовывать внешний xml в структуру object.array[item].array[item].attribute.value |
2KidsKilla
Видимо, это дело вкуса. 2fiot Это я понимаю. Мне маштабы практической пользы от этого стали интересны. Потому что я отчасти считаю, что Нокс прав... |
по большей части действительно дело вкуса.
лично я с объектом XML неоч. вот и выкручиваюсь)) есть вопрос. как узнать когда парсер завершил работу? |
Цитата:
вот сразу после xmlObject = this.firstChild.parse2Object(); и ставь что тебе там надо... |
Вложений: 1
да?
тогда ничерта не понимаю: Object.prototype.makeObj = function(src ,tags) { ... xmlSrc.onLoad = function(flag) { if (flag) { xmlObject = this.firstChild.parse2Object(tags); trace(xmlObject._value) ... } ... } trace выдает undefined хотя если сделать это все вне функции(как у тебя, Nox) и проверять спустя какое то время все фурычит... |
| Часовой пояс GMT +4, время: 19:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.