![]() |
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()если тип ноды текс то вертуть валуе елсе не чего ... ЗЫ. а зачем оно тебе сдесь ? у тебя ведь уже объект массив... |
| Часовой пояс GMT +4, время: 00:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.