在本章中,我们将研究XML 加载和解析。如概述一节所述,XML DOM是独立于语言和平台的。
为了描述由API提供的接口,W3C使用称为接口定义语言(IDL)的抽象语言。使用IDL的优点是开发人员学习如何使用他或她最喜欢的语言使用DOM,并可以轻松切换到其他语言。
缺点是,由于它是抽象的,IDL不能被Web开发人员直接使用。由于编程语言之间的差异,他们需要在抽象接口和具体语言之间进行映射或绑定。DOM已经映射到编程语言,如Javascript,JScript,Java,C,C ++,PLSQL,Python和Perl。
在以下章节和所有章节中,我们将使用Javascript作为编程语言来加载XML文件。
一个解析器是用来分析的文档,我们的情况下,XML文档中,并做具体与信息东西的软件应用程序。一些基于DOM的解析器列在下表中:
解析器 | 描述 |
---|---|
JAXP | Sun Microsystem的Java解析解析Java API(JAXP) |
XML4J | IBM的XML解析器(XML4J) |
msxml | Microsoft的XML解析器(msxml)2.0版内置到Internet Explorer 5.5中 |
4DOM | 4DOM是Python编程语言的解析器。 |
XML :: DOM | XML :: DOM是使用Perl来处理XML文档的Perl模块。 |
Xerces | Apache的Xerces Java解析器 |
在像DOM这样的基于树的API中,解析器遍历XML文件并创建相应的DOM对象。然后可以来回遍历DOM结构。
加载XML文档时,XML内容可以有两种形式:
直接作为XML文件
作为XML字符string
以下示例演示了当XML内容被接收为XML文件时如何使用Ajax和Javascript 加载XML(node.xml)数据。这里是Ajax函数,获取xml文件的内容并将其存储在XML DOM中。一旦创建DOM对象,就会被解析。
<!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 if (window.XMLHttpRequest) {// Create an instance of XMLHttpRequest object. code for IE7+, Firefox, Chrome, Opera, Safari 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","/dom/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>
代码的大部分细节都在脚本代码中。
Internet Explorer使用ActiveXObject(“Microsoft.XMLHTTP”)创建一个XMLHttpRequest对象的实例,其他浏览器使用XMLHttpRequest()方法。
该responseXML的直接在XML DOM把XML内容。
将XML内容转换为JavaScript XML DOM后,可以使用JS DOM方法和属性来访问任何XML元素。我们使用了诸如childNodes,nodeValue和DOM方法的DOM属性,例如getElementsById(ID),getElementsByTagName(tags_name)。
将此文件另存为loadingexample.html并在浏览器中打开该文件,将显示如下输出:
以下示例演示了当XML内容被接收为XML文件时如何使用Ajax和Javascript加载XML数据。这里是Ajax函数,获取xml文件的内容并将其存储在XML DOM中。一旦创建DOM对象,就会被解析。
<!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 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>Tanmay</FirstName>"; text=text+"<LastName>Patil</LastName>"; text=text+"<ContactNo>1234567890</ContactNo>"; text=text+"<Email>tanmaypatil@xyz.com</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>
代码的大部分细节都在脚本代码中。
Internet Explorer使用ActiveXObject(“Microsoft.XMLDOM”)将XML数据加载到DOM对象中,其他浏览器使用DOMParser()函数和parseFromString(text,"text / xml")方法。
变量文本应包含具有XML内容的字符string。
将XML内容转换为JavaScript XML DOM后,可以使用JS DOM方法和属性来访问任何XML元素。我们已经使用了DOM属性,如childNodes,nodeValue。
将此文件另存为loadingexample.html并在浏览器中打开该文件,将显示如下输出:
现在我们看到XML内容如何转换为JavaScript XML DOM,现在可以使用XML DOM方法访问任何XML元素。