Пробежка XML DOM по дереву узлов
- " не может содержать пробелы или символы перевода строки. Предыдущая страница
- Следующая страница Определение узлов 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>
Пример объяснения:
- Загрузка строки XML в
xmlDoc
в - Получение подузлов корневого элемента
- Вывод каждого подузла с его именем и значением текстового узла
Различия браузеров в обработке 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.
]]>
- " не может содержать пробелы или символы перевода строки. Предыдущая страница
- Следующая страница Определение узлов DOM