Javascript,无法解析XML子节点

时间:2012-05-26 10:48:11

标签: javascript xml

在我的Javascript代码中解析xml响应时遇到了一些麻烦(使用extjs 4,但我觉得这里没关系)。

xml响应是这样的:

<response>
  <id>9</id>
  <time>2012-05-24 14:22:44</time>
  <name>user</name>
  <message>message</message>
  <p2pchat>
    <requestor>user1</requestor>
    <requested>user2</requested>
    <time>2012-05-26 12:13:28</time>
    <message>msg</message>
  </p2pchat>
</response>

我没有麻烦解析第一级元素,如id,时间,名称和消息,但我的js代码无法访问更深层次的元素。代码是:

var response = xmlHttpGetMessages.responseText;
response = xmlHttpGetMessages.responseXML.documentElement;
idArray = response.getElementsByTagName("id");
nameArray = response.getElementsByTagName("name");
timeArray = response.getElementsByTagName("time");
messageArray = response.getElementsByTagName("message");

requestorsArray = response.getElementsByTagName("p2pchat/requestor");
requestedsArray = response.getElementsByTagName("p2pchat/requested");
timep2pArray = response.getElementsByTagName("p2pchat/time");
messagep2pArray = response.getElementsByTagName("p2pchat/message");  

执行此代码后,最后四个数组的长度始终为0,没有从我的xml响应中提取任何内容。 我搜索谷歌搜索xml树中的内部元素的方法,但在10个不同的页面中,我发现了近10种不同的sintaxs,似乎没有一个对我有用......有什么想法?

1 个答案:

答案 0 :(得分:0)

谷歌上的几个小时的数据挖掘给了我解决方案,我在这里发布,所以如果有人遇到同样的问题,发现这篇文章有我使用的解决方案:

var xmlp2pchat = response.getElementsByTagName("p2pchat");

var requestorsArray = Array();
var requestedsArray = Array();
var timep2pArray = Array();
var messagep2pArray = Array();

for(var i=0;i<xmlp2pchat.length;i++) {
  var x = xmlp2pchat[i].getElementsByTagName("requestor");
  var y = xmlp2pchat[i].getElementsByTagName("requested");
  var z = xmlp2pchat[i].getElementsByTagName("time");
  var t = xmlp2pchat[i].getElementsByTagName("message");

  for(var j=0;j<x.length;j++) {
    requestorsArray.push(x[j]);
    requestedsArray.push(y[j]);
    timep2pArray.push(z[j]);
    messagep2pArray.push(t[j]);
  }

}

然后我用它

 var whatever = requestorsArray[i].firstChild.data