В общем недавно решил сделать одну универсальную библиотеку, для облегчения программирования. но столкнулся с одной проблемой. Я загружаю файл xml. Затем хочу считать его, для этого использую Ajax. Затем каждый тэг я хочу представить в виде объекта JavaScript, который будет содержать текст, атрибут и его текст, а так же вложенные объекты которые относяться к вложенным тэгам.
Для загрузки документа я создал следующую библиотеку:
Код |
---|
// Создания объекта для хранения методов, свойств, событий для Ajax технологии
var net = new Object();
// Загрузка данных
net.ContentLoader = function(url, onload, typeFile, onerror)
{
this.url = url;
this.req = null;
this.onload = onload;
this.typeFile = typeFile;
this.XMLDom = new Object();
this.textData = null;
this.onerror = onerror ? onerror : this.defaultError;
this.loadXMLDoc(url);
}
net.ContentLoader.prototype = {
loadXMLDoc:function(url)
{
if(window.XMLHttpRequest)
{
this.req = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(this.req)
{
try
{
var loader = this;
this.req.onreadystatechange = function()
{
loader.onReadyState.call(loader);
}
this.req.open("GET", url, true);
this.req.send(null);
}
catch(err)
{
this.onerror.call(this);
}
}
},
onReadyState:function()
{
var req = this.req;
var ready = req.readyState;
if(ready == 4)
{
var httpStatus = req.status;
if(httpStatus == 200 || httpStatus == 0)
{
if(this.typeFile == "XML")
{
this.ObjectXML.call(this);
this.onload.call(this);
}
else if(this.typeFile == "TEXT")
{
this.textData = req.responseText;
this.onload.call(this);
}
}
}
},
ObjectXML:function(layer)
{
// Здесь и происходит разбор тэгов и преобразование их в объекты JavaScript
},
defaultError:function()
{
alert("Ошибка");
}
}
|
Что бы запустить данный код требуеться указать следующий код:
Код |
---|
var loader = new net.ContentLoader("data.xml", nextFunc, "XML");
|
Так же требуется создать функцию которая начнет выполняться когда вышеперечисленный код выполниться, в данном случаи мы его просто сделаем так:
Код |
---|
function nextFunc()
{
alert("nextFunc");
}
|
Допустим наш файл XML будет выглядить так:
Код |
---|
<data time="11:30">
ther's text 1
<my>
<name>reverent</name>
</my>
there's text 2
</data>
|
Ве это выглядит круто, но проблема наступает во время выполнения функции ObjectXML. Как можно ее так создать что бы потом можно было обращаться к каждому элименту допустим таким образом:
Код |
---|
alert(this.XMLDom.data.my.name[$_text][0]); // reverent
alert(this.XMLDom.data.time); // выдаст 11:30
alert(this.XMLDom.data[$_text][0]); // выдаст ther's text 1
|
Все это конечно только задумка, но на деле если это реализовать то поможет облегчить работу с приходящими данными в виде XML.
У кого есть какие предложения по реализации данной функции????