如何用Prototype解析XML字符串?

时间:2012-03-23 13:40:03

标签: javascript json prototypejs

我有一个字符串<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']}

这样的东西

我找到了一种在here中实现它的好方法,所以我的代码应该是那样的

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 个答案:

答案 0 :(得分:2)

您想使用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-encode

编辑:请注意,您需要先测试DOMParser才能使用它。检查here,了解如何执行此操作。对不起W3Schools链接。

答案 1 :(得分:0)

为什么要用字符串构建数组对象?为什么不

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};