在本章中,我們將學習XML載入和解析。
為了描述API提供的介面,W3C使用稱為介面定義語言(IDL
)的抽象語言。 使用IDL
的優勢在於開發人員可以學習如何將DOM與他/她喜歡的語言一起使用,並可以輕鬆切換到其他語言。
缺點是,由於它是抽象的,因此Web開發人員不能直接使用IDL。 由於程式設計語言之間的差異,它們需要在抽象介面和它們的具體語言之間進行對映或繫結。 DOM已經對映到程式設計語言,如:Javascript,JScript,Java,C,C++,PLSQL,Python和Perl。
在以下章節中,我們將使用Javascript 作為程式設計語言來載入XML檔案。
解析器是一種軟體應用程式,用於分析文件,在範例中是XML文件,並根據資訊執行某些操作。 一些基於DOM的解析器列在下表中 -
序號 | 解析器 | 描述 |
---|---|---|
1 | JAXP | Sun Microsystem的XML解析Java API(JAXP) |
2 | XML4J | IBM的XML XML解析器(XML4J) |
3 | msxml | Microsoft的XML解析器(msxml)版本2.0內建於IE 5.5中 |
4 | 4DOM | 4DOM是Python程式設計語言的解析器 |
5 | XML::DOM | XML::DOM 是一個Perl模組,用於使用Perl處理XML文件 |
6 | Xerces | Apache的Xerces Java解析器 |
在像DOM這樣基於樹的API,解析器遍歷XML檔案並建立相應的DOM物件。 然後,可以來回遍歷DOM結構。
在載入XML文件時,XML內容可以有兩種形式 -
以下範例演示了當XML內容作為XML檔案接收時如何使用Ajax和Javascript載入XML(node.xml)資料。 這裡,Ajax函式獲取xml檔案的內容並將其儲存在XML DOM中。 建立DOM物件後,將對其進行解析。
檔案:loading-example.html -
<!DOCTYPE html>
<html>
<body>
<div>
<b>FirstName:</b> <span id = "FirstName"></span><br>
<b>LastName:</b> <span id = "LastName"></span><br>
<b>ContactNo:</b> <span id = "ContactNo"></span><br>
<b>Email:</b> <span id = "Email"></span>
</div>
<script>
//if browser supports XMLHttpRequest
var xmlhttp = null;
if (window.XMLHttpRequest) { // Create an instance of XMLHttpRequest object.
//code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest();
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
// sets and sends the request for calling "node.xml"
xmlhttp.open("GET","/node.xml",false);
xmlhttp.send();
// sets and returns the content as XML DOM
xmlDoc = xmlhttp.responseXML;
//parsing the DOM object
document.getElementById("FirstName").innerHTML =
xmlDoc.getElementsByTagName("FirstName")[0].childNodes[0].nodeValue;
document.getElementById("LastName").innerHTML =
xmlDoc.getElementsByTagName("LastName")[0].childNodes[0].nodeValue;
document.getElementById("ContactNo").innerHTML =
xmlDoc.getElementsByTagName("ContactNo")[0].childNodes[0].nodeValue;
document.getElementById("Email").innerHTML =
xmlDoc.getElementsByTagName("Email")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
檔案:node.xml -
<Company>
<Employee category = "Technical" id = "firstelement">
<FirstName>Susen</FirstName>
<LastName>Su</LastName>
<ContactNo>1584567890</ContactNo>
<Email>[email protected]</Email>
</Employee>
<Employee category = "Non-Technical">
<FirstName>Max</FirstName>
<LastName>Su</LastName>
<ContactNo>1334667898</ContactNo>
<Email>[email protected]</Email>
</Employee>
<Employee category = "Management">
<FirstName>Min</FirstName>
<LastName>Su</LastName>
<ContactNo>1364562350</ContactNo>
<Email>[email protected]</Email>
</Employee>
</Company>
程式碼的大部分細節都在指令碼程式碼中說明了,這裡簡單表述 -
ActiveXObject("Microsoft.XMLHTTP")
來建立XMLHttpRequest
物件的範例,其他瀏覽器使用XMLHttpRequest()
方法。responseXML
直接在XML DOM中轉換XML內容。childNodes
,nodeValue
和DOM方法,如getElementsById(ID)
,getElementsByTagName(tags_name)
。執行
將此檔案另存為loading-example.html 並在瀏覽器中將其開啟。將看到以下輸出 -
下面的範例演示了當XML內容作為XML檔案接收時如何使用Ajax和Javascript載入XML資料。 這裡,Ajax函式獲取xml檔案的內容並將其儲存在XML DOM中。 當建立了DOM物件,就會對其進行解析。
檔案:loading-example2.html -
<!DOCTYPE html>
<html>
<head>
<script>
// loads the xml string in a dom object
function loadXMLString(t) { // for non IE browsers
if (window.DOMParser) {
// create an instance for xml dom object
var parser = new DOMParser();
xmlDoc = parser.parseFromString(t,"text/xml");
}
// code for IE
else { // create an instance for xml dom object
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(t);
}
return xmlDoc;
}
</script>
</head>
<body>
<script>
// a variable with the string
var text = "<Employee>";
text = text+"<FirstName>Yiibai</FirstName>";
text = text+"<LastName>Su</LastName>";
text = text+"<ContactNo>1804567890</ContactNo>";
text = text+"<Email>[email protected]</Email>";
text = text+"</Employee>";
// calls the loadXMLString() with "text" function and store the xml dom in a variable
var xmlDoc = loadXMLString(text);
//parsing the DOM object
y = xmlDoc.documentElement.childNodes;
for (i = 0;i<y.length;i++) {
document.write(y[i].childNodes[0].nodeValue);
document.write("<br>");
}
</script>
</body>
</html>
程式碼的大部分細節都在指令碼程式碼中說明了,這裡簡單表述 -
ActiveXObject("Microsoft.XMLDOM")
將XML資料載入到DOM物件中,其他瀏覽器使用DOMParser()
函式和parseFromString(text,'text/xml')
方法。text
包含帶有XML內容的字串。childNodes
,nodeValue
。執行結果
將此檔案另存為loading-example2.html,並在瀏覽器中將其開啟。將看到以下輸出 -