Los últimos tutoriales de desarrollo web
 

XML Árbol de nodos DOM Traverse


medios de bucle a través o viajan a través del árbol de nodos que atraviesa.


Recorriendo el árbol de nodos

Frecuencia con que desea bucle de un documento XML, por ejemplo: cuando se quiere extraer el valor de cada elemento.

Esto se llama "Traversing the node tree"

El ejemplo siguiente bucle a través de todos los nodos hijos <libro>, y muestra sus nombres y valores:

Ejemplo

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

Salida:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Inténtalo tú mismo "

Ejemplo explicó:

  1. Cargar la cadena XML en xmlDoc
  2. Obtener los nodos hijos del elemento raíz
  3. Para cada nodo hijo, imprima el nombre de nodo y el valor de nodo del nodo de texto

Las diferencias en navegador DOM de análisis

Todos los navegadores modernos soportan la especificación W3C DOM.

Sin embargo, hay algunas diferencias entre los navegadores. Una diferencia importante es:

  • La forma en que manejan los espacios en blanco y nuevas líneas

DOM - White Spaces y nuevas líneas

XML contiene a menudo nueva línea, o caracteres de espacio en blanco, entre los nodos. Esto es a menudo el caso cuando el documento es editado por un editor simple como el Bloc de notas.

El siguiente ejemplo (edited by Notepad) contiene CR / LF (new line) entre cada línea y dos plazas en frente de cada nodo hijo:

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

Internet Explorer 9 y versiones anteriores no tratar vacíos espacios en blanco, o nuevas líneas como nodos de texto, mientras que otros lo hacen los navegadores.

El siguiente ejemplo de salida el número de nodos hijos del elemento raíz (of books.xml ) tiene. IE9 y anteriores es la salida 4 nodos secundarios, mientras que IE10 y versiones posteriores, y otros navegadores es la salida 9 nodos hijo:

Ejemplo

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}
Inténtalo tú mismo "

PCDATA - Analizado datos de caracteres

analizadores XML normalmente analizan todo el texto en un documento XML.

Cuando se analiza un elemento XML, el texto entre las etiquetas XML también se analiza:

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

El analizador hace porque los elementos XML puede contener otros elementos, como en este ejemplo, donde el <name> elemento contiene otros dos elementos (first and last) :

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

y el analizador dividirlo en sub-elementos como este:

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

Los datos de caracteres analizados sintácticamente (PCDATA) es un término usado sobre los datos de texto que será analizado por el analizador XML.


CDATA - (Unparsed) Datos de Carácter

El término se utiliza CDATA sobre los datos de texto que no debe ser analizado por el analizador XML.

Los personajes como "<" y "&" son ilegales en elementos XML.

"<" Se generará un error porque el analizador lo interpreta como el inicio de un nuevo elemento.

"&" se generará un error porque el analizador lo interpreta como el inicio de una entidad de caracteres.

Un poco de texto, como el código JavaScript, contiene una gran cantidad de "<" o "&" caracteres. Para evitar errores de código de secuencia de comandos se pueden definir como CDATA.

Todo dentro de una sección CDATA es ignorado por el intérprete.

Una sección CDATA comienza con " <![CDATA[ " and ends with " ]]> " :

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

En el ejemplo anterior, todo dentro de la sección CDATA es ignorado por el intérprete.

Notes on CDATA sections:

Una sección CDATA no puede contener la cadena "]]>" . anidada secciones CDATA no están permitidos.

El "]]>" que marca el final de la sección CDATA no pueden contener espacios o saltos de línea.