Работа с 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);
Другие вопросы по тегам