2012-12-21 159 views
0

我只是试图在JS中使用HttpXMLRequest对象,并且我有一个基本循环从XML文件加载名称和年龄并将其引发到表中。如果每个兄弟姐妹都具有相同的值,那么它会正常加载,但是如果其中一个元素从兄弟中丢失,它就会停止而不是跳过它。这里有一些代码。HttpXMLRequest被卡住

的HTML -

(The rest of the XML parser and DTD, html, body etc is up here) 
<script> 
var x=xmlDoc.getElementsByTagName("person"); 

document.write("<table border='1'>"); 
for (i=0;i<x.length;i++) 
    { 
    var name = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue; 
    var age = x[i].getElementsByTagName("age")[0].childNodes[0].nodeValue; 

    document.write("<tr>"); 
    document.write("<td>"+name+"</td>"); 
    document.write("<td>"+age+"</td>"); 
    document.write("</tr>"); 
    } 
document.write("</table>"); 
</script> 

的XML -

(The DTD and stuff it up here) 
<people> 
    <person> 
    <name>Jim</name> 
    <age>20</age> 
    </person> 
    <person> 
    <name>Bob</name> 
    </person> 
    <person> 
    <name>Tom</name> 
    <age>20</age> 
    </person> 
    <person> 
    <name>James</name> 
    <age>20</age> 
    </person> 
    <person> 
    <name>Richie</name> 
    <age>20</age> 
    </person> 
</people> 

从这个例子中,HTML会写一旦获得鲍勃后停下来,我认为需要有一个try/catch或者如果在那里为每个名字和年龄,但我似乎无法放置它,因此它的工作原理。任何人有任何想法?

我试过搜索,但我不知道这个问题被称为什么,并描述它没有任何东西。

只是简单地添加“<age />”或<age></age>“不是一个选项,最终我会用大量的XML文件。除非我需要写一些会自动添加它的东西,如果它不存在的话,我想这是可以接受的。

Cheers Hombries。

+0

你没有检查控制台是否有错误信息?它会给你的信息。 – epascarello

回答

1

检查元素的存在,试图访问其子节点之前:

var personElem = x[i]; 

var ageElems = personElem.getElementsByTagName("age"); 

var age = ageElems.length 
     ? ageElems[0].firstChild.nodeValue 
     : ''; 

顺便说一句,这是通常更容易使用JSON而不是XML的。随着JSON,你的反应会是这样的:

{ 
    "people": [ 
     { 
      "name" : "Jim", 
      "age" : 20 
     }, 
     { 
      "name" : "Bob" 
     } 
    ] 
} 

而且你可以用点语法访问项目:

var age = data.people[0].age; 

例如,PHP有内置的功能编码JSON:json_encode()

+0

这是将您的建议简单地用您的+ if语句替换年龄变量的正确方法吗?如果这样仍然不起作用。它如何知道人是什么?这是一个内置函数吗?稍后我会看看JSON,因为这看起来很有趣,谢谢! – Dicckk

+0

'personElem'对应于'x [i]'你的情况。我在我的答案中更新了代码片段,使其更容易放入代码中。可能您必须详细了解[JavaScript](https://developer.mozilla.org/en-US/docs/JavaScript)和[DOM](https://developer.mozilla.org/en-US/docs/ DOM)。 –

+0

代码工作完美,所以我现在要接受答案,但我必须指出你的观察力是首屈一指的@“可能你必须更多地了解JavaScript和DOM。”雅'想?无论如何干杯;) – Dicckk