Paglalapit sa puno ng node ng XML DOM

Ang paglalapit (Traverse) ay nangangahulugan na maglalapit sa puno ng node.

Paglalapit sa puno ng node

Madalas kang kailangan ng paglalapit sa XML dokumento, tulad ng: kapag gusto mong makuha ang halaga ng bawat elemento.

Ang prosesong ito ay tinatawag na 'paglalapit sa puno ng node'

Ang eksemplo ay nagpaikot sa lahat ng mga anak ng <book> at ipapakita ang kanilang pangalan at halaga:

mga halimbawa

<!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 ay palaging ipinapakita bilang pangunahing bata
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>

Subukan nang personal na!

Mga salaysay ng halimbawa:

  1. Ikaladkad ang XML na palatandaan sa xmlDoc sa
  2. Hikayatin ang mga anak na bata ng pangunahing elemento
  3. Ipalabas ang pangalan ng bawat anak na bata at ang halaga ng mga tekstong bata ng bawat bata

Ang pagkakaiba ng mga browser sa pagpiparangalan ng DOM

Lahat ng modernong browser ay sumusuporta sa W3C DOM na pamantayan.

Ngunit, mayroong ilang pagkakaiba sa pagitan ng mga browser. Isang mahalagang pagkakaiba ay:

Ang paraan nilang paggamit ng walang laman at linya ng pagsusunod

DOM - walang laman at linya ng pagsusunod

Ang XML ay karaniwang naglalaman ng mga linya ng pagsusunod o mga walang laman na liriko sa pagitan ng mga bata. Kapag ginagawa ng simpleng editor tulad ng notepad ang dokumento, karaniwang nangyayari ito.

Ang halimbawa na ito (na pinatnugot ng notepad) ay may CR/LF (mga linya ng pagsusunod) sa pagitan ng bawat linya, at may dalawang espasyo sa harap ng bawat anak na bata:

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

Hindi ipinapapalit ng Internet Explorer 9 at mas maaga ang walang laman o bagong linya bilang mga tekstong bata, habang ginagawang ganito ng iba pang mga browser.

Ang halimbawa na ito ay maglulabas ng bilang ng mga anak na bata ng pangunahing elemento (books.xml). Ang IE9 at mas maaga ay maglulabas ng 6 na mga anak na bata, habang ang IE10 at mas higit pa at iba pang mga browser ay maglulabas ng 9 na mga anak na bata:

mga halimbawa

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "bilang ng mga sub-node: " + x.length;
}

Subukan nang personal na!

PCDATA - Pinarating na character data (Parsed Character Data)

Ang pangkaraniwang XML parser ay iparating ang lahat ng teksto sa loob ng XML dokumento.

Sa pagparating ng XML elemento, ang teksto sa loob ng XML tag ay din naiparating:

<message>Ang teksto na ito ay din naiparating</message>

Ang parser ay gawin ito dahil ang XML elemento ay maaaring magkaroon ng iba pang elemento, tulad ng sa kasong ito, kung saan ang <name> elemento ay may iba pang dalawang elemento (first at last):

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

Ang parser ay ihihiwalay ito sa mga sumusunod na sub-elemento:

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

Ang termino "parse character data" (PCDATA) ay ginagamit upang ilarawan ang teksto ng datos na iparating ng XML parser.

CDATA - Hindi iparating na character data (Unparsed Character Data)

Ang termino CDATA ay ginagamit upang ilarawan ang teksto ng datos na hindi dapat iparating ng XML parser.

"<" at "&ang " at ibang simbolo ay ilegal sa loob ng XML elemento.

"<" ay magiging kamali, dahil ito ay inililitaw ng parser bilang simbolo ng bagong elemento.

"&" ay magiging kamali, dahil ito ay inililitaw ng parser bilang simbolo ng character entity.

Ang ilang teksto (halimbawa ang JavaScript code) ay may maraming "<" o "&" simbolo. Upang maiwasan ang mga pagkakamali, maaaring ituring ang script code bilang CDATA.

Ang lahat ng nilalaman sa loob ng CDATA bahagi ay ililigtas ng parser.

"CDATA bahagi gamit "<![CDATA[" nagsisimula, gamit "]]>" pagtatapos: "

<script>
<![CDATA[
function matchwo(a,b) {
    kung (a < b at a < 0) {
        magbigay ng 1;
    }
        return 0;
    }
}
]]>
</script>

在上面的示例中,解析器会忽略 CDATA 部分内的所有内容。

关于 CDATA 部分的注意事项:

CDATA 部分不能包含字符串 "]]>"。不允许嵌套 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能包含空格或换行符。