Как разобрать строку XML с прототипом? - PullRequest
0 голосов
/ 23 марта 2012

У меня есть строка <ul><li e="100" n="50">Foo</li><li e="200" n="150">Bar</li></ul>, и на стороне клиента я должен преобразовать ее в JSON. Что-то вроде {data:['Foo','Bar'],params:['100;50','200;150']}

Я нашел довольно хороший способ добиться этого в здесь , поэтому мой код должен быть примерно таким

var $input = $(input);
var data = "data:[";
var params = "params:[";

var first = true;
$input.find("li").each(function() {
    if (!first) {
        data += ",";
        params += ",";
    } else {
        first = false;
    }
    data += "'" + $(this).text() + "'";
    var e = $(this).attr("e");
    var n = $(this).attr("n");
    params += "'" + e + ';' + n + "'";
});

return "{data + "]," + params + "]}";

Но проблема в том, что я не могу использовать jquery. Как я могу сделать то же самое с прототипом?

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Вы хотите использовать синтаксический анализатор DOM:

https://developer.mozilla.org/en/DOMParser

Как то так ...

var xmlStr = '<ul><li e="100" n="50">Foo</li><li e="200" n="150">Bar</li></ul>';

var parser = new DOMParser();
var doc = parser.parseFromString(xmlStr, "application/xml");

var rootElement = doc.documentElement;
var children = rootElement.childNodes;

var jsonObj = {
    data: [],
    params: []
};

for (var i = 0; i < children.length; i++) {
    // I realize this is not how your implementation is, but this should give
    // you an idea of how to work on the DOM element
    jsonObj.data.push( children[i].getAttribute('e') );
    jsonObj.params.push( children[i].getAttribute('n') );
}

return jsonObj.toJSON();

Кроме того, не создавайте вручную строку JSON. Заполните объект, затем JSON-кодируйте it.

Edit: обратите внимание, что вам нужно проверить DOMParser, прежде чем вы сможете его использовать. Проверьте здесь , как вы можете это сделать. Извините за ссылку W3Schools.

0 голосов
/ 23 марта 2012

Почему вы строите объект массива со строкой? Почему не

var data = new Array();
var params = new Array();

$$("li").each(function() {
    data.push ($(this).text());
    params.psuh($(this).attr("e") + ";" + $(this).attr("n"));
});


return {data:data.toString(), params:params.toString()};

или

return {data:data, params:params};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...