【问题标题】:How to parse XML string with Prototype?如何使用 Prototype 解析 XML 字符串?
【发布时间】:2012-04-08 01:43:27
【问题描述】:

我有一个字符串<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。我怎样才能对原型做同样的事情?

【问题讨论】:

    标签: javascript json prototypejs


    【解决方案1】:

    您想使用 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 链接。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,但它仍然需要 jQuery,我只能使用 PrototypeJS
      • 尝试使用 $$,这里有一个参考:api.prototypejs.org/dom/dollar-dollar $$('div') === document.getElementsByName('div')
      • 对不起,我误解了你的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 2012-06-21
      • 2010-12-23
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多