我目前正在开发一个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对象,如果是,那该怎么办?
答案 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
,并可以使用querySelectorAll
或querySelector
查找您想要的元素。在您想要的每个元素中,只需抓住您需要的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);