Различия в браузерах XML DOM

Разные браузеры обрабатывают пустые текстовые узлы в XML DOM по-разному.

Пример

Ниже приведен пример с использованием файла XML books.xml.

Функция loadXMLDoc()находится вне JavaScript и используется для загрузки файлов XML.

Показать длину списка узлов
Этот пример показывает длину списка узлов. В IE и других браузерах результаты различаются.
Пропуск пустых текстовых узлов между узлами
В этом примере проверяется значение nodeType узла, и обрабатываются только элементные узлы.

Различия браузеров в анализе DOM

Все современные браузеры поддерживают стандарт W3C DOM.

Однако, между браузерами есть различия. Важные различия заключаются в двух пунктах:

  • Способы загрузки XML
  • Способы обработки пробельных символов и новых строк

В «Анализ XML DOM» Это раздел, в котором уже было объяснено, как загружать XML.

В этом разделе мы расскажем о различных способах обработки пробельных символов и новых строк.

DOM - пробельные символы и новые строки

XML часто содержит пробельные символы или символы новой строки между узлами. Это часто встречается при использовании простых редакторов (например, блокнота).

Ниже приведен пример (отредактированный в блокноте), в котором между строками содержится CR/LF, и перед каждым подузлом стоят два пробела:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Firefox и другие браузеры обрабатывают пустые пробельные символы или символы новой строки как узлы текста, в то время как Internet Explorer этого не делает.

Следующий фрагмент кода показывает, сколько подузлов имеет корневой элемент (books.xml):

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
document.write("Number of child nodes: " + x.length);

Пример的解释:

  • Используя loadXMLDoc() "books.xml"Загрузить в xmlDoc"
  • Получите подузлы корневого элемента
  • Вывод количества подузлов

Результат зависит от используемого браузера. Firefox выдает 9, а IE выдает 4.

TIY

Пропуск пустых текстовых узлов между узлами

Чтобы пропустить пустые текстовые узлы между элементами, необходимо проверить тип узла. Тип элемента равен 1:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
for (i=0;i<x.length;i++)
{ 
if (x[i].nodeType==1)
  {// только обрабатывать узлы элементов 
  document.write(x[i].nodeName);
  document.write("<br />");
  } 
}

Пример的解释:

  • Используя loadXMLDoc() "books.xml"Загрузить в xmlDoc"
  • Получите подузлы корневого элемента
  • Проверьте тип каждого подузла. Если тип узла равен "1", то это узел элемента

TIY (простой) или TIY (полный)