2012-09-28 42 views
1

此代碼正在取出一個xml文件並將其解析並輸出爲表格。以下是一段代碼(面向Firefox):getElementsByTagName返回空值(但在調試模式下可以很好地工作)

function viewXML(inputForm) { 
     var URL=inputForm.URL.value; //input XML URL 

     // create document and load URL  
     var xmlDoc = document.implementation.createDocument("","doc",null); 
     xmlDoc.load(URL); 

     xmlDoc.onload = generateHTML(xmlDoc); 
     hWin = window.open("","sth", "height=800,width=600"); 
     hWin.document.write(html_text); 
     hWin.document.close(); 
    } 

viewXML是一個按鈕的onClick函數。現在generateHTML()一段代碼:

function generateHTML(xmlDoc) { 
    ... 
    caption=xmlDoc.getElementsByTagName("title").item(0).firstChild.nodeValue; //<1> 
    html_text += "<caption align='left'><h1>" + caption + "</h1></caption>"; 
    ... 
} 

一塊XML文件:

<catalog> 
    <title>Airbus_Aircraft_Families</title> 
    <aircraft> 
     <Airbus>A380</Airbus> 
     <Aircraft>A380</Aircraft> 
     <seats>555</seats> 
     <Range>15000km</Range> 
     <Wingspan>78.8m</Wingspan> 
     <Height>24.1m</Height> 
    </aircraft> 
</catalog> 

問題: 這段代碼,當我在調試模式下運行它一步一步工作正常 - 在Firebug中。但是如果沒有設置斷點,當程序點擊行< 1>時,將顯示一個錯誤,說: xmlDoc.getElementsByTagName(「title」)。item(0)爲null,這顯然不是真的。

而且有趣,當我試圖< 1>行之前添加一行

alert(xmlDoc.getElementsByTagName("title").length) 

,它會彈出一個窗口顯示爲0,但在我點擊「確定」,正確的標題(來自XML)將顯示在新窗口中!就像在逐步模式下一樣。

事情我想:

1,改變xmlDoc.getElementsByTagName("title").item(0)xmlDoc.getElementsByTagName("title")[0]

沒有工作,調試器告訴我: 「xmlDoc.getElementsByTagName(」 標題 「)[0]未定義」

2,刪除XML文件中標籤內或標籤之間的所有空格,沒有幫助。

+1

它似乎需要一些時間來加載XML並使其成爲一個HTML元素。 – Moorthy

回答

0

該問題可能是由於您的文檔異步加載。您可以在這裏查看document.async房產。我想如果你把這個屬性設置爲false,你的代碼將會工作。

// create document and load URL 
var xmlDoc = document.implementation.createDocument("","doc",null); 
xmlDoc.async = false; 
xmlDoc.onload = generateHTML(xmlDoc); 
xmlDoc.load(URL); 

請注意,我在調用加載函數之前移動了附加事件處理程序的行以加載事件。

相關問題