Javascript 支持名称空间xml的AJAX库

Javascript 支持名称空间xml的AJAX库,javascript,xml,ajax,namespaces,Javascript,Xml,Ajax,Namespaces,我正在寻找一个支持名称空间xml的AJAX JavaScript库 我在网上读了几十篇文章(包括stackoverflow),但没有找到好的答案。有很多AJAX示例,但一旦名称空间发挥作用,它们就会中断(例如jQuery选择器的情况)。我不知道您确切地称之为“AJAX JavaScript库”——发出HTTP请求与访问文档树中的节点不同 如果您将库理解为“用于开发软件的资源集合”(),那么,作为JSX库的一部分,我已经为XMLHttpRequest和名称空间感知编写了相当兼容的包装:和 http

我正在寻找一个支持名称空间xml的AJAX JavaScript库


我在网上读了几十篇文章(包括stackoverflow),但没有找到好的答案。有很多AJAX示例,但一旦名称空间发挥作用,它们就会中断(例如jQuery选择器的情况)。

我不知道您确切地称之为“AJAX JavaScript库”——发出HTTP请求与访问文档树中的节点不同

如果您将库理解为“用于开发软件的资源集合”(),那么,作为JSX库的一部分,我已经为
XMLHttpRequest
和名称空间感知编写了相当兼容的包装:和

http.js
以同样的方式支持同步和异步处理,甚至可以访问本地文件系统(如果授予了权限)。因为JSX可以作为一个库,所以您可以单独使用
http.js
xpath.js
,或者与外部代码一起使用来补充其中的一个,或者一起使用

例如,您可以将它们一起使用,如下所示。假设您有一个资源名为
test.XML
like的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>
另见:

在Gecko浏览器、WebCore浏览器、基于MSHTML的浏览器和Opera浏览器中,JSX:
object.js
http.js
xpath.js
的组合测试呈阳性。然而,目前JSX主要是实验性代码

,请参阅脚本控制台


欢迎有建设性的反馈。此外,JSX是。(你还不能进行
结账
,但我正在处理它。)

你能提供一些例子吗?呃…有漏洞的例子吗?使用jQuery:$(responseXML).find(“foo:bar”)
$(“nspace\\\:data”,xml).find(“foo\\:bar”).each(function(i){
No,我担心这是一个由于特殊情况而碰巧起作用的技巧,但最近的jQuery版本(v1.7)打破了这一技巧。我对请求和响应处理都感兴趣(我的主要问题是后者)。谢谢你的回复,我会看看你的包装。你在Internet Explorer 7/8/9中测试过吗?至于最后一个链接,我担心名称空间一开始就没有任何相关内容。我无法测试xpath.js的头版本(今天提交)我在Wine上的IE6.0.2800.1106中测试为阳性,因此支持MSXML的
selectNodes
,我不希望在以后的IE版本(相同的DOM)中出现意外情况。至于发出HTTP请求,请查看JSX:HTTP.js(参见编辑)。这已经在命名的浏览器中进行了测试,至少包括IE7和IE8,并为商业网站提供了动力(当然,这些网站运行的是稍旧的JSX版本).@Christophe你什么意思-没有任何相关内容?RSS/XML使用名称空间。你需要一个名称空间解析器来使用XPath查找这些元素。我之前的帖子介绍了如何创建和使用名称空间解析器。
jsx.XPath.create…NSResolver()
在此基础上构建。抱歉,我需要仔细查看。我刚刚看到了getElementsByTagName的使用,它将在涉及名称空间时立即中断。@Christophe我已更新了说明并将两个示例合并到一个用例中,以便您更好地了解脚本如何协同工作。
<!-- 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>