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 | <html> |
範例<script>
說明:
- 首先建立三個變數
text
、parser
、xmlDoc
。1
var text, parser, xmlDoc;
- 定義了
text
的文本字串。1
2
3
4
5text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>"; - 實例一個
XML DOM
解析器DOMParser
物件。1
parser = new DOMParser();
- 使用
parseFromString
解析包含HTML
或XML
的字串,返回一個XML DOM
對象(HTMLDocument
或XMLDocument
)。1
xmlDoc = parser.parseFromString(text,"text/xml");
註:詳細
parseFromString()
,參考。 - 使用
getElementsByTagName
方法返回具有給定標籤名稱的HTMLCollection
元素,並更新網頁物件ID
為demo
的內容。1
2document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;註:詳細
getElementsByTagName()
,參考。
範例<html>
說明:
- 建立一個
p
區塊,並設定id
為demo
。
1 | <p id="demo"></p> |
執行效果:
XMLHttpRequest 對象
XMLHttpRequest
對象有一個內置的XML
解析器。
responseText
屬性以字符串形式回應。responseXML
屬性將回應作為XML DOM
對象返回。
所以要將回應用作XML DOM
對象,可以使用responseXML
屬性。
範例使用 w3schools - Try dom xmlhttprequest_responsexml
1 |
|
範例<script>
說明:
首先建立一個名為
loadXMLDoc
的function
。1
function loadXMLDoc()
以建構元實例一個
XMLHttpRequest
物件。1
var xhttp = new XMLHttpRequest();
使用
onreadystatechange
屬性指定每次XMLHttpRequest
對象的狀態發生變化時要執行的函數。1
xhttp.onreadystatechange = function()
函數內判斷當
readyState
屬性為4
且status
屬性為200
時,表示回應完成。1
if (this.readyState == 4 && this.status == 200)
註:
readyState
數字的狀態描述,參考。將
XML DOM
指this
對象傳至myFunction
的function
。1
myFunction(this);
使用
open()
方法,設定請求xmlhttp_info.txt檔。1
xhttp.open("GET", "cd_catalog.xml", true);
註:詳細
open()
,參考。最後發送請求
send()
方法。1
xhttp.send();
註:詳細
send()
,參考。建立一個名為
myFunction
的function
。1
function myFunction(xml)
建立四個變數
x
、i
、xmlDoc
、txt
。1
var x, i, xmlDoc, txt;
定義
xmlDoc
為responseXML
txt
為空字串。x
= 使用getElementsByTagName
方法返回具有給定標籤名稱的HTMLCollection
元素。註:解析的cd_catalog.xml檔內可見
ARTIST
為多個。
1
2
3xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");針對
x
使用迴圈,取得值並不斷附加至txt
內,最後將其更新網頁物件ID
為demo
的內容。1
2
3
4for (i = 0; i< x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
範例<html>
說明:
- 建立一個
p
區塊,並設定id
為demo
。
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