Библиотека AJAX, которая поддерживает пространство имен xml - PullRequest
1 голос
/ 05 декабря 2011

Я ищу библиотеку AJAX JavaScript, которая поддерживает пространство имен xml.

Я прочитал десятки постов в Интернете (в том числе на stackoverflow), но не нашел хорошего ответа. Есть много примеров AJAX, но они ломаются, как только в игру вступают пространства имен (это имеет место, например, с селекторами jQuery).

1 Ответ

0 голосов
/ 12 декабря 2011

Я не знаю точно, что вы называете "библиотекой AJAX JavaScript" - создание HTTP-запросов - это проблема , отличная от доступа к узлам в дереве документов.

Если вы понимаетебиблиотека как «набор ресурсов, используемых для разработки программного обеспечения» ( Wikipedia ), затем, как часть библиотеки JSX , я написал довольно совместимые оболочки для XMLHttpRequest и пространства имен-в курсе DOM Level 3 XPath : http.js и xpath.js.

http.js поддерживает синхронную и асинхронную обработку одинаковои даже может получить доступ к локальной файловой системе (если разрешение предоставлено).Поскольку JSX считается библиотекой, вы можете использовать http.js и xpath.js либо отдельно, либо с внешним кодом для дополнения либо одного, либо вместе.

Вы можете использовать их вместе, например, следующим образом.Предположим, у вас есть XML-документ с именем ресурса test.xml, например

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soap:Body>
    <res:Response
        xmlns:res="http://domain.example/Response">
      <res:OUTPUT>
        <res:UNDO_COUNT>1.0</res:UNDO_COUNT>
        <res:MSG>Undo complete (No more to undo)</res:MSG>
      </res:OUTPUT>
    </res:Response>
    <res:OUTPUT
        xmlns:res="http://domain.example/Response">
      foo
    </res:OUTPUT>
  </soap:Body>
</soap:Envelope>

, и вы хотите извлечь 1.0 из его элемента res:UNDO_COUNT, вы можете написать:

<!-- 1. Include prerequisites and dependencies using Resource Builder (recommended) -->
<script type="text/javascript" src="builder.php?src=object,string,http,xpath"></script>

<script type="text/javascript">
  /*
   * 2. Construct the HTTP request wrapper; 
   *    the default is a GET request with asynchronous handling
   */
  var request = new jsx.net.http.Request("test.xml");

  /* 3. Prepare processing of the HTTP response */
  request.setSuccessListener(function (response) {
    /* 5. Get the reference to the XMLDocument object */
    var doc = response.responseXML;

    /* 6. Create the namespace resolver that fits your query best */
    var nsResolver = jsx.xpath.createFullNSResolver(null, doc);

    /* 7. Make the XPath query */
    var nodes = jsx.xpath.evaluate("//res:UNDO_COUNT/text()", doc, nsResolver);

    /*
     * 8. Process the result.  jsx.xpath.evaluate() returns a reference
     * to an Array instance if you do not specify the result type.
     */

    /* "1.0" */
    console.log(nodes[0].data);
  });

  /* 4. Make the HTTP request */
  request.send();
</script>

См. Также: Синтаксический анализ XML / RSS с URL-адреса с использованием Java Script

Ge Комбинация JSX: object.js, http.js и xpath.js была протестирована в Gecko-, WebCore, MSHTML и Opera браузеры.Однако на данный момент JSX является в основном экспериментальным кодом.

Testcase , см. Консоль сценария

Конструктивная обратная связь приветствуется.Кроме того, JSX бесплатное программное обеспечение .(Вы еще не можете сделать checkout, но я работаю над этим.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...