tutoriais mais recente desenvolvimento web
 

XML DOM nó de árvore Traverse


Atravessando meio looping através ou que viajam através da árvore de nós.


Atravessando o nó de árvore

Muitas vezes, você quer fazer um loop um documento XML, por exemplo: quando você deseja extrair o valor de cada elemento.

Isso é chamado de "Traversing the node tree"

O exemplo a seguir percorre todos os nós filhos de <book>, e exibe seus nomes e valores:

Exemplo

<!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>

Saída:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Tente você mesmo "

Exemplo explicou:

  1. Carregar a string XML em xmlDoc
  2. Obter os nós filhos do elemento raiz
  3. Para cada nó filho, a saída do nome do nó e o valor do nó do nó de texto

Diferenças navegador no DOM de análise

Todos os navegadores modernos suportam a especificação W3C DOM.

No entanto, existem algumas diferenças entre os navegadores. Uma diferença importante é:

  • A maneira de lidar com espaços em branco e novas linhas

DOM - White Spaces e novas linhas

XML geralmente contém nova linha, ou espaços em branco, entre os nós. Este é frequentemente o caso quando o documento é editado por um editor simples, como o Bloco de Notas.

O exemplo a seguir (edited by Notepad) contém CR / LF (new line) entre cada linha e dois lugares na frente de cada nó filho:

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9 e anteriores não tratá-branco-espaços vazios, ou novas linhas como nós de texto, enquanto outros navegadores fazer.

O exemplo a seguir irá imprimir o número de nós filho do elemento raiz (of books.xml ) tem. IE9 e anteriores vontade saída 4 nós filho, enquanto IE10 e versões posteriores, e outros navegadores irá imprimir 9 nós filho:

Exemplo

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}
Tente você mesmo "

PCDATA - Parsed dados de caracteres

analisadores XML normalmente analisar todo o texto em um documento XML.

Quando um elemento XML é analisado, o texto entre as tags XML também é analisado:

<message>This text is also parsed</message>

O analisador é que isto porque os elementos XML podem conter outros elementos, como neste exemplo, onde o <name> elemento contém dois outros elementos (first and last) :

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

eo analisador irá dividi-lo em sub-elementos como este:

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

Dados de caracteres processadas que são (PCDATA) é um termo usado sobre dados de texto que será analisado pelo analisador XML.


CDATA - (Unparsed) dados de caracteres

O termo CDATA é usada sobre dados de texto que não deve ser analisados ​​pelo analisador XML.

Personagens como "<" e "&" são ilegais em elementos XML.

"<" Irá gerar um erro porque o analisador interpreta como o início de um novo elemento.

"&" Irá gerar um erro porque o analisador interpreta como o início de uma entidade de caráter.

Algum texto, como o código JavaScript, contém uma grande quantidade de "<" ou "&" caracteres. Para evitar erros de código de script pode ser definido como CDATA.

Tudo dentro de uma seção CDATA é ignorado pelo analisador.

Uma seção CDATA começa com " <![CDATA[ " and ends with " ]]> " :

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

No exemplo acima, tudo dentro da seção CDATA é ignorado pelo analisador.

Notes on CDATA sections:

Uma seção CDATA não pode conter a string "]]>" . seções Nested CDATA não são permitidos.

O "]]>" que marca o final da seção CDATA não pode conter espaços ou quebras de linha.