XML DOM қырғын бұтақ жүйесін түрлендіру
Түрлендіру (Traverse) дегеніміз - қырғын бұтақ жүйесін түрлендіру
Қырғын бұтақ жүйесін түрлендіру
Сіз әрине XML құжаттарын түрлендіріп көп кезінде керектесіңіз, мысалы: сіз әрбір элементтің санын алу кезінде.
бұл процесі 'қырғын бұтақ жүйесін түрлендіру' деп аталады
нигірі аңғармау аңғармау <book> бәйгеңдің барлық қырғын жайларын түрлендіріп, олардың аты мен санын көрсету:
实例
!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 دائمًا يمثل العنصر الجذر 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>
توضيح المثال:
- تحميل سلسلة XML إلى
xmlDoc
م - الحصول على العناصر الفرعية للعنصر الجذر
- يظهر كل اسم عنصر فرعي، وكذلك قيمة العنصر النصي له
الاختلافات في تحليل DOM للمتصفحات
جميع المتصفحات الحديثة تدعم معيار W3C DOM.
لكن هناك بعض الاختلافات بين المتصفحات. الفرق المهم هو:
طريقة معالجتهم للفراغات والأنظمة الجديدة
DOM - الفراغات والأنظمة الجديدة
عادةً يحتوي XML على مسافات أو فراغات بين العناصر. عند تعديل المستند باستخدام محررات بسيطة مثل Notepad، يحدث هذا عادةً:
تزىيرىن امثلة هذة (معدة بواسطة ملف النص) تحتوي على CR/LF (أوامر النسخ) بين كل سطر، وثلاثة مسافات قبل كل عنصر فرعي:
<book> <title>雅舍谈吃</title> <author>梁实秋</author> <press>江苏文艺出版社</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
Internet Explorer 9 وأقل من ذلك لن يعتبروا الفراغ أو الأنظمة الجديدة كعناصر نصية، بينما سيفعلها المتصفحات الأخرى:
تزىيرىن امثلة هذة تضيف عدد العناصر الفرعية للعنصر الجذر (books.xml). إصدارات Internet Explorer 9 وأقل من ذلك لن يعتبروا الفراغ أو الأنظمة الجديدة كعناصر نصية، بينما سيفعلها المتصفحات الأخرى:
实例
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "子节点数:" + x.length; }
PCDATA - 解析的字符数据(Parsed Character Data)
XML 解析器通常会解析 XML 文档中的所有文本。
解析 XML 元素时,也会解析 XML 标记之间的文本:
<message>此文本也会被解析</message>
解析器执行此操作是因为 XML 元素可以包含其他元素,如本例所示,其中 <name> 元素包含另外两个元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
解析器会将其分解为如下子元素:
<name> <first>Bill</first> <last>Gates</last> </name>
“解析字符数据” (PCDATA) 这个术语,用于描述将由 XML 解析器解析的文本数据。
CDATA - 未解析的字符数据(Unparsed Character Data)
术语 CDATA 用于描述不应由 XML 解析器解析的文本数据。
"<
" 和 "&
" 等字符在 XML 元素中是非法的。
"<
" 将生成错误,因为解析器将其解释为新元素的开始。
"&
" 将生成错误,因为解析器将其解释为字符实体的开头。
某些文本(例如 JavaScript 代码)包含大量 "<
" 或 "&
" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分内的所有内容都会被解析器忽略。
CDATA 部分以 "<![CDATA[
" 开始,以 "]]>
" 结束:
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) { 1; } return 0; } } ]]> </script>
在上面的示例中,解析器会忽略 CDATA 部分内的所有内容。
关于 CDATA 部分的注意事项:
CDATA 部分不能包含字符串 "]]>
"。不允许嵌套 CDATA 部分。
标记 CDATA 部分结尾的 "]]>
" 不能包含空格或换行符。