xml childNotes Count варьируется в зависимости от браузера - PullRequest
1 голос
/ 10 декабря 2011

У меня есть функция 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>

Затем, позвольте мне показать результат вывода "оповещения (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 Ответ

1 голос
/ 10 декабря 2011

Firefox считает пробелы и разрывы строк как узлы XML, а IE - нет. Если вы напишите

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

в той же строке вашего XML-документа вы не найдете текстового узла между AnswerA и AnswerB. Я бы отфильтровал текстовые узлы вручную, так как они повторяются следующим образом:

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

или, скорее, так:

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

Другие методы, о которых я могу подумать, не работают в старых браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...