在Firefox附加组件中使用XML(ex Jetpack)

时间:2011-06-28 15:47:37

标签: firefox-addon firefox-5

我目前正在开发一个Firefox附加组件(使用https://addons.mozilla.org/en-US/developers/docs/sdk/1.0/),它使用一个返回数据为xml的API。

我的问题是我需要解析返回的数据,并希望使用xml对象。

由于请求模块仅支持JSON和Text(https://addons.mozilla.org/en-US/developers/docs/sdk/1.0/packages/addon-kit/docs/request.html#Response),因此我需要将response.text转换为XML。 代码如下所示:

var Request = require('request').Request  
.......
var req = Request({
        url: https://to-the-api.com,
        content: {
          op: 'get-the-data-op',
          password: "super-sec",
          user: "username"
        },
        onComplete: function (response) {

         dataAsText = response.text;
         console.log("output: " + dataAsText);
        }
    });
    req.post();

我已经尝试过用户(新的DOMParser).parseFromString(response.text,'text / xml')但不幸的是它只是失败并出现了像ReferenceError这样的错误:未定义DOMParser

问题是,如果你们中的任何人能够在Firefox附加组件中创建一个Xml对象,如果是,那该怎么办?

4 个答案:

答案 0 :(得分:1)

看起来像xml一样解析响应的功能已被删除。 check out this bugzilla reference

答案 1 :(得分:0)

如果DOMParser不可用,您可以尝试E4X

var xml = new XML(response.text);
alert(xml.children().length());

答案 2 :(得分:0)

如果要将响应作为XML处理,是否可以使用普通的XMLHttpRequest?

答案 3 :(得分:0)

您希望使用XMLHttpRequest对象来处理xhr请求。然后,当您获得响应时,请访问responseXML变量的request对象。在responseXML,您将拥有documentElement,并可以使用querySelectorAllquerySelector查找您想要的元素。在您想要的每个元素中,只需抓住您需要的textContent

这是一个让你前进的例子(这会在响应中查找'xmls'元素):

var request = new require("xhr").XMLHttpRequest();
request.open('GET', 'https://to-the-api.com', true);
request.onreadystatechange = function (aEvt) {
  if (request.readyState == 4) {
     if(request.status == 200) {
      var xmls = request.responseXML.documentElement.querySelectorAll("xmls");
      for (var i = 0; i < xmls.length; i++) {
        console.log("xml", i, xmls[i], xmls[i].textContent);
      }
     }
     else {
       console.log('Error', request.responseText);
     }
  }
};
request.send(null);