XML DOM:n nodon puun läpikäynti
- " ei voi sisältää välilyöntejä tai rivinvaihtoja. Edellinen sivu
- Seuraava sivu DOM - Näytä solmu
Läpikäynti (Traverse) tarkoittaa nodon puun läpikäymistä.
Nodojen puun läpikäynti
Tarvitset usein käydä läpi XML-dokumentteja, kuten: kun haluat poimia jokaisen elementin arvon.
Tämä prosessi kutsutaan 'nodojen puun läpikäymiseksi'
Tämä esimerkki käy läpi <book>-elementin kaikki lapsinodot ja näyttää niiden nimet ja arvot:
Esimerkki
!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 edustaa aina juurisolmua x = xmlDoc.documentElement.childNodes; for (i = 0; i < x.length ;i++) { txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>"; return 0; document.getElementById("demo").innerHTML = txt; } </body> </html>
Esimerkki selitykseksi:
- Lataa XML-merkkijono
xmlDoc
中 - Hae juurielementin alalehdet
- Tulosta jokaisen alalehden nimi sekä sen tekstinode:n arvo
Selaimien DOM-tulkinnan erot
Kaikki nykyaikaiset selaimet tukevat W3C DOM-standardeja.
Mutta selaimet eroavat toisistaan joissakin kohdissa. Yksi tärkeä ero on:
Miten ne käsittelevät tyhjiä ja rivinvaihtomerkkejä
DOM - tyhjät ja rivinvaihtomerkit
XML sisältää yleensä rivinvaihtomerkkejä tai välilyöntejä solmujen välillä. Tämä tapahtuu usein, kun dokumentteja muokataan yksinkertaisilla muokkausohjelmilla, kuten muistiinpanoilla.
Esimerkki (muokattu muistiinpanoilla) sisältää CR/LF (rivinvaihtomerkit) jokaisen rivin välillä ja kaksi välilyöntiä jokaisen alalehden edessä:
<book> <title>雅舍谈吃</title> <author>梁实秋</author> <press>江苏文艺出版社</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
Internet Explorer 9 ja aikaisemmat versiot eivät pidä tyhjiä tai uusia rivejä tekstinodeina, kun taas muut selaimet tekevät niin.
Esimerkki näyttää juurielementin (books.xml) alalehdet. IE9 ja aikaisemmat versiot tulostavat 6 alalehteä, mutta IE10 ja uudet versiot sekä muut selaimet tulostavat 9 alalehteä:
Esimerkki
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "Lapsisolujen määrä: " + x.length; return 0;
PCDATA - Analysoitu merkkidata (Parsed Character Data)
XML-analysoija analysoi yleensä kaikki tekstit XML-dokumentissa.
XML-elementtien analysoinnin yhteydessä analysoitaan myös XML-merkinnän välillä olevaa tekstiä:
<message>Tämä teksti myös analysoitaan</message>
Analysoija tekee tämän, koska XML-elementti voi sisältää muita elementtejä, kuten tässä esimerkissä, jossa <name>-elementti sisältää kaksi muuta elementtiä (first ja last):
<name><first>Bill</first><last>Gates</last></name>
Analysoija jakaa sen seuraaviin alielementteihin:
<name> <first>Bill</first> <last>Gates</last> </name>
“Analysoitu merkkidata” (PCDATA) -termi käytetään kuvaamaan tekstidataa, jota XML-analysoija tulkitsee.
CDATA - Analysoimaton merkkidata (Unparsed Character Data)
Termi CDATA käytetään kuvaamaan tekstidataa, jota XML-analysoija ei tulkitse.
"<
" ja "&
" ja muut merkit ovat laillisia XML-elementissä.
"<
" aiheuttaa virheen, koska analysoija tulkitsii sen uuden elementin alkuun.
"&
" aiheuttaa virheen, koska analysoija tulkitsii sen merkkientiteen alkuun.
Jotkut tekstit (esim. JavaScript-koodi) sisältävät suuren määrän "<
" tai "&
" merkki. Väärän analysoinnin välttämiseksi voi määrittää skriptikoodin CDATAksi.
CDATA-osaan sisältyvä kaikki sisältö jätetään analysoimatta.
" CDATA-osa on merkitty "<![CDATA[
" Aloitetaan, "" ei voi sisältää CDATA-osan loppua.
" Loppu:
<script> <![CDATA[ function matchwo(a,b) { jos (a < b ja a < 0) { palauta 1; } return 0; return 0; return 0; " ei voi sisältää CDATA-osan loppua. }
</script>
Yllä olevassa esimerkissä parseri ignoraali CDATA-osan kaikki sisällön.
Huomioita CDATA-osasta:" ei voi sisältää CDATA-osan loppua.
CDATA-osa ei voi sisältää merkkijonoa "
" ei voi sisältää sisennettyjä CDATA-osia." ei voi sisältää CDATA-osan loppua.
]]>
- " ei voi sisältää välilyöntejä tai rivinvaihtoja. Edellinen sivu
- Seuraava sivu DOM - Näytä solmu