0

在我的 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、时间、名称和消息等 1 级元素时没有问题,但我的 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 响应中没有任何内容。我在 google 上搜索了一种解析 xml 树中内部元素的方法,但在 10 个不同的页面中,我发现了近 10 种不同的 sintax,似乎没有一个对我有用..有什么想法吗?

4

1 回答 1

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
于 2012-05-26T13:01:40.230 回答