Работа с XML в дополнении Firefox (например, Jetpack) - PullRequest
1 голос
/ 28 июня 2011

В настоящее время я разрабатываю надстройку 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#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не определено

Вопрос в том, смог ли кто-нибудь из вас создать объект Xml внутри надстройки Firefox, и если да, то как?

Ответы [ 4 ]

1 голос
/ 29 июня 2011

Похоже, возможность анализа ответа, поскольку xml присутствовал, но был удален проверить эту ссылку на bugzilla

0 голосов
/ 16 августа 2011

Вы хотите использовать объект 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);
0 голосов
/ 29 июня 2011

Разве вы не можете использовать обычный XMLHttpRequest, если хотите обработать ответ как XML?

0 голосов
/ 28 июня 2011

Если DOMParser недоступно, вы можете попробовать E4X :

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