XML DOM het doorlopen van het knooppuntboom

Doorlopen (Traverse) betekent het doorlopen van het knooppuntboom.

Het doorlopen van het knooppuntboom

U heeft vaak nodig om door XML-documenten te loopen, bijvoorbeeld: wanneer u de waarde van elk element wilt extraheren.

Dit proces wordt 'het doorlopen van het knooppuntboom' genoemd

Dit voorbeeld loopt door alle subnodes van <book> en toont hun namen en waarden:

Voorbeeld

<!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 staat altijd voor de root-node
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>

Probeer het zelf uit

Voorbeeldverklaring:

  1. Laad de XML-tekenreeks in xmlDoc in
  2. Verkrijg de subnodes van de root-element
  3. Geef de naam van elke subnode weer, evenals de waarde van de tekstnode

Verschillen in DOM-bewerking tussen browsers

Alle moderne browsers ondersteunen de W3C DOM-specificaties.

Maar er zijn enkele verschillen tussen browsers.

Hun manier van omgaan met witruimte en newline

DOM - witruimte en newline

XML bevat meestal een newline of whitespace tussen nodes. Dit komt vaak voor wanneer documenten worden bewerkt met eenvoudige editors zoals Notepad.

Het volgende voorbeeld (bewerkt met Notepad) bevat CR/LF (carriage return/line feed) tussen elke regel en er zijn twee spaties voor elke subnode:

<book>
  <title>雅舍谈吃</title>
  <author>梁实秋</author>
  <press>江苏文艺出版社</press>
  <year>2013</year>
  <price>35</price>
  <ISBN>9787539962771</ISBN>
</book>

Internet Explorer 9 en eerdere versies beschouwen witruimte of nieuwe regels niet als tekstnodes, terwijl andere browsers dit wel doen.

Het volgende voorbeeld geeft het aantal subnodes van het wortel-element (books.xml) weer. IE9 en eerdere versies geven 6 subnodes weer, terwijl IE10 en latere versies en andere browsers 9 subnodes weergeven:

Voorbeeld

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Aantal subnodes: " + x.length;
return 0;

Probeer het zelf uit

PCDATA - Geanalyseerde character data (Parsed Character Data)

De XML-parser zal normaal gesproken alle tekst in het XML-document analyseren.

Bij het analyseren van XML-elementen, wordt ook de tekst tussen de XML-markers geanalyseerd:

<message>Dit tekst wordt ook geanalyseerd</message>

De parser voert deze actie uit omdat XML-elementen andere elementen kunnen bevatten, zoals in dit voorbeeld, waarbij het <name>-element twee andere elementen bevat (first en last):

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

De parser zal het ontleden tot de volgende sub-elementen:

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

De term '解析字符数据' (PCDATA) wordt gebruikt om tekstgegevens te beschrijven die door de XML-parser moeten worden geanalyseerd.

CDATA - Ongeanalyseerde character data (Unparsed Character Data)

Het term 'CDATA' wordt gebruikt om tekstgegevens te beschrijven die niet door de XML-parser moeten worden geanalyseerd.

"<" en "&" en andere tekens zijn niet toegestaan in XML-elementen.

"<" zal een fout veroorzaken, omdat de parser het interpreteert als het begin van een nieuw element.

"&" zal een fout veroorzaken, omdat de parser het interpreteert als het begin van een character entity.

Sommige teksten (bijvoorbeeld JavaScript-code) bevatten veel "<" of "&" tekens. Om fouten te voorkomen, kan de scriptcode worden gedefinieerd als CDATA.

Alle inhoud binnen de CDATA deel wordt genegeerd door de parser.

" CDATA deel wordt omringd door "<![CDATA[" Begin, met "" Markeert het einde van de CDATA sectie" Eind: "

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    else {
        return 0;
    return 0;
return 0;
" Markeert het einde van de CDATA sectie
}

</script>

In het voorbeeld hierboven zal de parser alle inhoud binnen de CDATA sectie negeren.

Opmerkingen over CDATA secties:" Markeert het einde van de CDATA sectieCDATA secties mogen geen string " bevatten

". Nested CDATA secties zijn niet toegestaan." Markeert het einde van de CDATA sectie]]>