Percorrer a árvore de nós do XML DOM
- Página Anterior Lista de Nós DOM
- Próxima Página Localização de Nó DOM
Percorrer (Traverse) significa percorrer a árvore de nós.
Percorrer a árvore de nós
Você frequentemente precisará iterar documentos XML, por exemplo: quando você deseja extrair os valores de cada elemento.
Este processo é chamado de “percorrer a árvore de nós”
Este exemplo ilustra a iteração sobre 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>雅舍谈吃</title>" + "<author>梁实秋</author>" + "<year>2013</year>" + "</book>"; parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); // documentElement sempre representa o nó raiz 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>
Explicação do exemplo:
- Carregar a string XML para
xmlDoc
em - Obter os nós filhos do elemento raiz
- Saída do nome de cada nó filho, bem como o valor do nó de texto
Diferenças entre navegadores no processamento DOM
Todos os navegadores modernos suportam o padrão W3C DOM.
Mas, há algumas diferenças entre os navegadores.
A maneira como eles tratam espaços em branco e quebras de linha
DOM - espaços em branco e quebras de linha
O XML geralmente contém quebras de linha ou caracteres em branco entre nós. Isso ocorre quando o documento é editado com editores simples, como o Bloco de Notas.
O exemplo a seguir (editado no Bloco de Notas) contém CR/LF (caracteres de nova linha) entre cada linha e dois espaços antes de cada nó filho:
<book> <title>雅舍谈吃</title> <author>梁实秋</author> <press>江苏文艺出版社</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
O Internet Explorer 9 e versões anteriores não consideram espaços em branco ou novas linhas como nós de texto, enquanto outros navegadores fazem isso.
O exemplo a seguir mostrará o número de nós filhos do elemento raiz (books.xml). As versões do IE9 e anteriores retornarão 6 nós filhos, enquanto as versões do IE10 e posteriores e outros navegadores retornarão 9 nós filhos:
Exemplo
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "Número de sub-nó: " + x.length; }
PCDATA - Dados de caractere analisados (Parsed Character Data)
Normalmente, os analisadores XML analisam todo o texto do documento XML.
Quando analisando elementos XML, também é analisado o texto entre os marcadores XML:
<message>Este texto também será analisado</message>
O analisador executa essa operação porque elementos XML podem conter outros elementos, como neste exemplo, onde o elemento <name> contém outros dois elementos (first e last):
<name><first>Bill</first><last>Gates</last></name>
O analisador o dividirá em seguintes sub-elementos:
<name> <first>Bill</first> <last>Gates</last> </name>
“Dados de caractere analisados” (PCDATA) é um termo usado para descrever dados de texto que serão analisados pelo analisador XML.
CDATA - Dados de caractere não analisados (Unparsed Character Data)
O termo CDATA é usado para descrever dados de texto que não devem ser analisados pelo analisador XML.
"<
" e "&
" e outros caracteres são ilegais dentro de elementos XML.
"<
" causará erro, pois o analisador o interpreta como o início de um novo elemento.
"&
" causará erro, pois o analisador o interpreta como o início de um entidade de caractere.
Alguns textos (por exemplo, código JavaScript) contêm uma grande quantidade de "<
" ou "&
" Caracter. Para evitar erros, o código do script pode ser definido como CDATA.
Todo o conteúdo dentro da parte de CDATA será ignorado pelo analisador.
" Parte de CDATA com "<![CDATA[
" Início, com "]]>
" Fim: "
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) { return 1; else { return 0; } } ]]> </script>
No exemplo acima, o analisador ignorará todo o conteúdo dentro da seção CDATA.
Observações sobre a seção CDATA:
A seção CDATA não pode conter a string "]]>
". Não é permitido o encadeamento de partes CDATA.
" Marca o final da seção CDATA]]>
" Não pode conter espaços ou quebras de linha.
- Página Anterior Lista de Nós DOM
- Próxima Página Localização de Nó DOM