2011-12-10 18 views
1

我有一個javascript函數,我嘗試讀取XML文件。xml childNotes瀏覽器上的計數有所不同

function readXML() 
{ 
    alert("readXML"); 
    if(xmlDoc.readyState == 4 || xmlDoc.readyState == 'complete') 
    { 
     for(var i=0; i < xmlDoc.getElementsByTagName("Question").length; i++) 
     { 
      var CurrentTuple = xmlDoc.getElementsByTagName("Question")[i]; 
      var QuestionID = CurrentTuple.attributes.getNamedItem("QuestionID").value; 
      var CorrectAnswer = CurrentTuple.attributes.getNamedItem("CorrectAnswer").value; 

      alert(QuestionID +":"+ CorrectAnswer); 

      var OutputDisplayString = ""; 
      for(var j=0; j< CurrentTuple.childNodes.length; j++) 
      { 
       //alert(CurrentTuple.childNodes[j].nodeName); 
       OutputDisplayString += CurrentTuple.childNodes[j].nodeName; 
       OutputDisplayString += "\n"; 
      } 
      alert(OutputDisplayString); 
     } 
    } 
} 

對於XML文件...

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Exam> 
    <Question QuestionID="Q001" CorrectAnswer="A"> 
     <Description>Does a final member variable have to be initialized at the time it's declared?</Description> 
     <AnswerA>No</AnswerA> 
     <AnswerB>Yes</AnswerB> 
     <AnswerC></AnswerC> 
     <AnswerD></AnswerD> 
    </Question> 
</Exam> 

那麼,請讓我帶的輸出結果 「警報(OutputDisplayString);」與Firefox。

#text 
Description 
#text 
AnswerA 
#text 
AnswerB 
#text 
AnswerC 
#text 
AnswerD 
#text 

讓我來比較我使用IE獲得的結果。

--------------------------- 
Message from webpage 
--------------------------- 
Description 
AnswerA 
AnswerB 
AnswerC 
AnswerD 

--------------------------- 
OK 
--------------------------- 

所以,我想知道是什麼,是#text我得到儘可能從Firefox的結果。
然後通過獲取此#text結果,我無法評估「CurrentTuple.childNodes.length」childNotes的確切計數。

請讓我知道發生了什麼的結果#text通過Firefox。
我怎樣才能得到正確的childNotes計數。

回答

1

Firefox會將空白和換行符作爲XML節點進行計數,而IE不會。如果你寫

<AnswerA>No</AnswerA><AnswerB>Yes</AnswerB> 

在你的XML文檔的同一行上,你應該找到AnswerA和AnswerB之間沒有文本節點。 我會手動過濾掉文本節點,因爲它們是重複這樣的:

if (CurrentTuple.childNodes[j].nodeName == "#text") ... 

或者更確切地說,是這樣的:

if ("tagName" in CurrentTuple.childNodes[j]) ... 

我能想到的其他方法都不奏效舊版瀏覽器上。

+1

只是爲了補充一點,微軟在這裏幾乎沒有什麼特別的地方:標準非常清楚,應該向應用程序報告空白,除了微軟之外,每個XML解析器似乎都這樣做。對於面向數據的XML來說,空格可能看起來不相關,但是當處理文檔時,它變得很重要。 –

相關問題