XML DOM procházet strom uzlu
Procházení znamená procházení nebo cestování napříč stromem uzlů.
Procházení stromem uzlů
Často chcete zacyklit dokument XML, například: když chcete extrahovat hodnotu každého prvku.
Toto se nazývá „Procházení stromem uzlů“
Níže uvedený příklad prochází všechny podřízené uzly <book> a zobrazuje jejich názvy a hodnoty:
Příklad
<!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>
Výstup:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Vysvětlený příklad:
- Načtěte řetězec XML do xmlDoc
- Získejte podřízené uzly kořenového prvku
- Pro každý podřízený uzel zadejte název uzlu a hodnotu uzlu textového uzlu
Rozdíly v prohlížeči v analýze DOM
Všechny moderní prohlížeče podporují specifikaci W3C DOM.
Mezi prohlížeči však existují určité rozdíly. Jeden důležitý rozdíl je:
- Způsob, jakým zvládají prázdná místa a nové řádky
DOM - Bílá místa a nové řádky
XML často obsahuje nové řádky nebo mezery mezi uzly. To je často případ, kdy je dokument upravován jednoduchým editorem, jako je Poznámkový blok.
Následující příklad (upravený programem Poznámkový blok) obsahuje CR/LF (nový řádek) mezi každým řádkem a dvěma mezerami před každým podřízeným uzlem:
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 a starší NEZACHÁZEJÍ prázdná bílá místa nebo nové řádky jako textové uzly, zatímco jiné prohlížeče to dělají.
Následující příklad vypíše počet podřízených uzlů, které má kořenový prvek ( knihy.xml ). IE9 a starší budou mít výstup 4 podřízených uzlů, zatímco IE10 a novější verze a další prohlížeče budou mít výstup 9 podřízených uzlů:
Příklad
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
PCDATA – analyzovaná znaková data
Analyzátory XML obvykle analyzují veškerý text v dokumentu XML.
Když je analyzován prvek XML, je analyzován také text mezi značkami XML:
<message>This text is also parsed</message>
Analyzátor to dělá, protože prvky XML mohou obsahovat další prvky, jako v tomto příkladu, kde prvek <name> obsahuje dva další prvky (první a poslední):
<name><first>Bill</first><last>Gates</last></name>
a analyzátor jej rozdělí na dílčí prvky, jako je tento:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Parsed Character Data (PCDATA) je termín používaný pro textová data, která budou analyzována analyzátorem XML.
CDATA - (neanalyzovaná) znaková data
Termín CDATA se používá pro textová data, která by neměla být analyzována analyzátorem XML.
Znaky jako "<" a "&" jsou v prvcích XML nezákonné.
"<" vygeneruje chybu, protože ji analyzátor interpretuje jako začátek nového prvku.
"&" vygeneruje chybu, protože ji analyzátor interpretuje jako začátek znakové entity.
Některý text, například kód JavaScript, obsahuje mnoho znaků „<“ nebo „&“. Aby se předešlo chybám, může být kód skriptu definován jako CDATA.
Vše v sekci CDATA je analyzátorem ignorováno.
Sekce CDATA začíná " <![CDATA[ " a končí " ]]> ":
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
Ve výše uvedeném příkladu je vše uvnitř sekce CDATA analyzátorem ignorováno.
Poznámky k oddílům CDATA:
Sekce CDATA nemůže obsahovat řetězec "]]>". Vnořené sekce CDATA nejsou povoleny.
"]]>", které označuje konec oddílu CDATA, nemůže obsahovat mezery ani zalomení řádků.