我有一个javascript函数,我尝试读取XML文件。
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>
然后,请让我显示“alert(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的确切计数。
请让我知道Firefox发生了 #text 的结果
我怎样才能得到正确的childNotes数量。
答案 0 :(得分: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]) ...
我能想到的其他方法不适用于旧浏览器。