Пересекая средства Перебор или путешествие через дерево узлов.
Обход узла дерева
Часто вы хотите, чтобы цикл документа XML, например: если вы хотите, чтобы извлечь значение каждого элемента.
Это называется "Traversing the node tree"
В приведенном ниже примере перебирает все дочерние узлы <книги>, и отображает их имена и значения:
пример
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";
parser = new DOMParser();
xmlDoc
= parser.parseFromString(text,"text/xml");
// documentElement always
represents the root node
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;
</script>
</body>
</html>
Вывод:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Попробуй сам " Объяснение примера:
- Загрузите XML-строку в xmlDoc
- Получить дочерние узлы корневого элемента
- Для каждого дочернего узла, выходного имени узла и значение узла текстового узла
Браузер Различия в DOM Парсинг
Все современные браузеры поддерживают спецификации W3C DOM.
Тем не менее, есть некоторые различия между браузерами. Одним из важных отличий является:
- Образом они обрабатывают бело-пространства и новые линии
DOM - Пробелы и новые линии
XML часто содержит новую строку или символы пробелов, между узлами. Это часто случается, когда документ редактируется с помощью простого редактора как Блокнот.
Следующий пример (edited by Notepad) под (new line) (edited by Notepad) содержит CR / LF (new line) между каждой линией и двумя пробелами перед каждым дочерним узлом:
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 и более ранние версии не лечить пустые белые-пробелы или новые строки в виде текстовых узлов, в то время как другие браузеры.
В следующем примере будет выводить число дочерних узлов корневой элемент (of books.xml ) имеет. IE9 и более ранних версий будет выводить 4 дочерние узлы, в то время как IE10 и более поздних версий, а также другие браузеры вывода 9 дочерних узлов:
пример
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
Попробуй сам " PCDATA - Успешно разобран символьных данных
XML парсеры обычно разобрать весь текст в документе XML.
Когда XML-элемент анализируется, текст между тегами XML также анализируется:
<message>This text is also parsed</message>
Анализатор делает это потому , что XML - элементы могут содержать другие элементы, как в этом примере, где <name> элемент содержит два элемента (first and last) :
<name><first>Bill</first><last>Gates</last></name>
и анализатор будет разбить его на суб-элементы, как это:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Разбираемые символьных данных (PCDATA) это термин , используемый о текстовых данных , которые будут обрабатываться с помощью XML - анализатором.
CDATA - (Unparsed) символов данных
Термин CDATA используется о текстовых данных, которые не должны быть разобрано в XML-анализатором.
Символы , такие как "<" и "&" являются незаконными в элементах XML.
"<" Будет генерировать ошибку , потому что анализатор интерпретирует его как начало нового элемента.
"&" Будет генерировать ошибку , потому что анализатор интерпретирует его как начало сущности характера.
Какой - то текст, как код JavaScript, содержит много "<" или "&" символов. Чтобы избежать ошибок в коде сценария может быть определен как CDATA.
Все внутри секции CDATA игнорируется анализатором.
Секция CDATA начинается с " <![CDATA[ " and ends with " ]]> " :
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
В приведенном выше примере, все, что внутри секции CDATA игнорируется анализатором.
Notes on CDATA sections:
Секция CDATA не может содержать строку "]]>" . секции Уплотненный CDATA не допускаются.
"]]>" , Который отмечает конец секции CDATA не может содержать пробелы или разрывы строк.