Like Share Discussion Bookmark Smile

J.J. Huang   2022-11-15   XML 2.延伸介紹   瀏覽次數:次   DMCA.com Protection Status

XML教學 | XML Parser

XML Parser是什麼?

首先要知道目前的瀏覽器都有一個內置的XML解析器,可以將文本轉換為XML DOM (Document Object Model)對象。

XML解析器把XML檔轉換為XML DOM對象,然後可以通過JavaScript操作的對象。
簡單來說XML DOM (Document Object Model)定義了訪問和編輯XML的屬性和方法。
所以在訪問XML檔之前,必須將其加載到XML DOM對象中。

註:XML DOM將會在下一章節進行說明與教學。


解析文本字串

範例使用 w3schools - Try dom load xml text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
<body>

<p id="demo"></p>

<script>
var text, parser, xmlDoc;

text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>

</body>
</html>

範例<script>說明:

  • 首先建立三個變數textparserxmlDoc
    1
    var text, parser, xmlDoc;
  • 定義了text的文本字串。
    1
    2
    3
    4
    5
    text = "<bookstore><book>" +
    "<title>Everyday Italian</title>" +
    "<author>Giada De Laurentiis</author>" +
    "<year>2005</year>" +
    "</book></bookstore>";
  • 實例一個XML DOM解析器DOMParser物件。
    1
    parser = new DOMParser();
  • 使用parseFromString解析包含HTMLXML的字串,返回一個XML DOM對象(HTMLDocumentXMLDocument)。
    1
    xmlDoc = parser.parseFromString(text,"text/xml");

    註:詳細parseFromString()參考

  • 使用getElementsByTagName方法返回具有給定標籤名稱的HTMLCollection元素,並更新網頁物件IDdemo的內容。
    1
    2
    document.getElementById("demo").innerHTML =
    xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;

    註:詳細getElementsByTagName()參考


範例<html>說明:

  • 建立一個p區塊,並設定iddemo
1
<p id="demo"></p>

執行效果:


XMLHttpRequest 對象

XMLHttpRequest對象有一個內置的XML解析器。

  • responseText屬性以字符串形式回應。
  • responseXML屬性將回應作為XML DOM對象返回。

所以要將回應用作XML DOM對象,可以使用responseXML屬性。

範例使用 w3schools - Try dom xmlhttprequest_responsexml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html>
<body>
<h2>My CD Collection:</h2>

<button type="button" onclick="loadXMLDoc()">
Get my CD collection</button>

<p id="demo"></p>

<script>
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xmlhttp.open("GET", "cd_catalog.xml", true);
xmlhttp.send();
}

function myFunction(xml) {
var x, i, xmlDoc, txt;
xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i< x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
}
</script>

</body>
</html>

範例<script>說明:

  • 首先建立一個名為loadXMLDocfunction

    1
    function loadXMLDoc()
  • 以建構元實例一個XMLHttpRequest物件。

    1
    var xhttp = new XMLHttpRequest();
  • 使用onreadystatechange屬性指定每次XMLHttpRequest對象的狀態發生變化時要執行的函數。

    1
    xhttp.onreadystatechange = function()
  • 函數內判斷當readyState屬性為4status屬性為200時,表示回應完成。

    1
    if (this.readyState == 4 && this.status == 200)

    註:readyState數字的狀態描述,參考

  • XML DOMthis對象傳至myFunctionfunction

    1
    myFunction(this);
  • 使用open()方法,設定請求xmlhttp_info.txt檔。

    1
    xhttp.open("GET", "cd_catalog.xml", true);

    註:詳細open()參考

  • 最後發送請求send()方法。

    1
    xhttp.send();

    註:詳細send()參考

  • 建立一個名為myFunctionfunction

    1
    function myFunction(xml)
  • 建立四個變數xixmlDoctxt

    1
    var x, i, xmlDoc, txt;
  • 定義

    • xmlDocresponseXML
    • txt為空字串。
    • x = 使用getElementsByTagName方法返回具有給定標籤名稱的HTMLCollection元素。

      註:解析的cd_catalog.xml檔內可見ARTIST為多個。

    1
    2
    3
    xmlDoc = xml.responseXML;
    txt = "";
    x = xmlDoc.getElementsByTagName("ARTIST");
  • 針對x使用迴圈,取得值並不斷附加至txt內,最後將其更新網頁物件IDdemo的內容。

    1
    2
    3
    4
    for (i = 0; i< x.length; i++) {
    txt += x[i].childNodes[0].nodeValue + "<br>";
    }
    document.getElementById("demo").innerHTML = txt;

範例<html>說明:

  • 建立一個p區塊,並設定iddemo
1
<p id="demo"></p>

執行效果:

結語

此章節「簡單」介紹了XML Parser和取得XML DOM,使用簡單範例其訪問與操作。
進而不在只是冷冷的純文字XML檔,已經透過程式對其進行訪問與操作。
下一章節將會介紹XML DOM的部份。


註:以上參考了
MDN - DOMParser.parseFromString
MDN - Document.getElementsByTagName
w3resource.com - XML Parser
RUNOOB.COM - XML Parser
維基百科-XML
Family with 220 icons by inipagi