2012-12-21 199 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