Работа с XML в дополнении Firefox (от Jetpack)
В настоящее время я разрабатываю надстройку Firefox (используя https://addons.mozilla.org/en-US/developers/docs/sdk/1.0/), которая использует API, где возвращаемые данные представлены в формате xml.
Моя проблема заключается в том, что мне нужно проанализировать возвращенные данные, и я хотел бы сделать это с помощью объекта XML.
Поскольку модуль запроса поддерживает только JSON и текст ( https://addons.mozilla.org/en-US/developers/docs/sdk/1.0/packages/addon-kit/docs/request.html), мне нужно преобразовать ответ.текст в 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 не определен
Вопрос в том, смог ли кто-нибудь из вас создать объект Xml внутри надстройки Firefox, и если да, то как?
4 ответа
Разве вы не можете использовать обычный XMLHttpRequest, если хотите обработать ответ как XML?
Похоже, возможность разбора ответа, поскольку xml присутствовал, но был удален. проверить эту ссылку bugzilla
Если DOMParser
недоступен, вы можете попробовать E4X:
var xml = new XML(response.text);
alert(xml.children().length());
Вы хотите использовать 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);