Пробежка XML DOM по дереву узлов

Термин «пробежка» означает пробежку по дереву узлов.

Пробежка дерева узлов

Вы часто можете использовать цикл XML-документов, например: когда вы хотите извлечь значения каждого элемента.

Этот процесс называется «пробежка дерева узлов»

Следующий пример циклически遍яет все подузлы <book> и отображает их имена и значения:

Пример

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>雅舍谈吃</title>" +
"<author>梁实秋</author>" +
"<year>2013</year>" +
"</book>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
// documentElement всегда представляет корневой узел
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
return 0;
</body>
</html>

Попробуйте сами

Пример объяснения:

  1. Загрузка строки XML в xmlDoc в
  2. Получение подузлов корневого элемента
  3. Вывод каждого подузла с его именем и значением текстового узла

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

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

Однако,之间存在一些差异.

Способ их обработки

DOM - пробелы и переводы строк

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

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

<book>
  <title>雅舍谈吃</title>
  <author>梁实秋</author>
  <press>江苏文艺出版社</press>
  <year>2013</year>
  <price>35</price>
  <ISBN>9787539962771</ISBN>
</book>

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

Пример, который будет выводить количество подузлов корневого элемента (books.xml). В версиях IE9 и ранее будет выводиться 6 подузлов, а в версиях IE10 и новее, а также других браузерах, будет выводиться 9 подузлов:

Пример

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Количество подузлов: " + x.length;
}

Попробуйте сами

PCDATA - обработанные символьные данные (Parsed Character Data)

Обычно XML-анализатор анализирует все тексты в документе XML.

При анализе элементов XML также анализируются текст между тегами XML:

<message>Этот текст также будет обработан</message>

Анализатор выполняет эту операцию, так как элементы XML могут содержать другие элементы, как показано в этом примере, где элемент <name> содержит два других элемента (first и last):

<name><first>Bill</first><last>Gates</last></name>

Анализатор разложит его на следующие подэлементы:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

“Обработанные символьные данные” (PCDATA) - это термин, используемый для описания текстовых данных, которые будут обработаны XML-анализатором.

CDATA - необработанные символьные данные (Unparsed Character Data)

Термины CDATA используются для описания текстовых данных, которые не должны анализироваться XML-анализатором.

"<" и "&" и другие символы в элементах XML являются недопустимыми.

"<" будет вызывать ошибку, так как анализатор будет интерпретировать его как начало нового элемента.

"&" будет вызывать ошибку, так как анализатор будет интерпретировать его как начало символьного эскиза.

Некоторые тексты (например, код JavaScript) содержат много "<" или "&" символ. Чтобы избежать ошибок, можно определить код скрипта как CDATA.

Все содержимое CDATA-части будет忽略яться анализатором.

" CDATA-часть заканчивается на "<![CDATA[" Начало, с "" не позволяет вложенные участки CDATA." Заключение:

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    else {
        return 0;
    }
}
" не позволяет вложенные участки CDATA.
return 0;

}

</script>

В примере выше анализатор будет игнорировать все содержимое в разделе CDATA." не позволяет вложенные участки CDATA.Внимание к разделу CDATA:

CDATA-часть не может содержать строку "" не позволяет вложенные участки CDATA.]]>