使用Prototype的$()解析responseXML

时间:2010-02-24 21:21:23

标签: javascript xml ajax xml-parsing prototypejs

我从Ajax.Request Ajax.Response.responseXML收到了XML。我的XML实际上包含XHTML标记,我希望将其添加到我的文档中。

但是,我遇到了将responseXML中的节点附加到当前文档中的问题。我怀疑这是因为它们是XML节点而不是DOM节点。

responseXML包裹在$()中似乎也没有返回节点的扩展版本,并且文档没有说它会不会或不会。

Prototype是否提供了使用responseXML的方法,如果没有,是否有跨浏览器方式来解析响应并使用它?

2 个答案:

答案 0 :(得分:2)

虽然我接受了Christian的答案作为“正确”的答案,但是我的一位同事向我展示了解析原型的XML响应的方式。

而是使用responseXML,您只需使用Element创建update(),然后responseText。然后,您可以使用select()和类似的方法遍历节点。

答案 1 :(得分:1)

没有原型没有解析XML的本机方法。你也不能用$(xml)扩展xml,然后用.next(),。select()等来遍历DOM。

这是我最近在一个项目中做的一个例子,用于从拼写检查结果中手动解析一些XML。应该让你开始。

parseResults: function(results) {
var c = results.responseXML.getElementsByTagName('c');
var corrections = $A(c);
if(!corrections.size()){
  this.link.insert({ after: '<span class="spellCheckNoErrors">No spelling errors</span>' });
  (function(){ this.link.next().remove(); }.bind(this)).delay(1);
  return null;
}
this.res = $A();
corrections.each(function(node){
  sugg = node.childNodes[0].nodeValue;
  offset = node.attributes[0].nodeValue;
  len = node.attributes[1].nodeValue;
        this.res.push(
    $H({
      word: this.text.substr(offset, len),
      suggestions: sugg.split(/\s/)
          })
  );
},this);
this.overlay();
},