-

在本章中,我们将研究XML 加载解析如概述一节所述,XML DOM是独立于语言和平台的。

为了描述由API提供的接口,W3C使用称为接口定义语言(IDL)的抽象语言。使用IDL的优点是开发人员学习如何使用他或她最喜欢的语言使用DOM,并可以轻松切换到其他语言。

缺点是,由于它是抽象的,IDL不能被Web开发人员直接使用。由于编程语言之间的差异,他们需要在抽象接口和具体语言之间进行映射或绑定。DOM已经映射到编程语言,如Javascript,JScript,Java,C,C ++,PLSQL,Python和Perl。

在以下章节和所有章节中,我们将使用Javascript作为编程语言来加载XML文件。

解析器

一个解析器是用来分析的文档,我们的情况下,XML文档中,并做具体与信息东西的软件应用程序。一些基于DOM的解析器列在下表中:

解析器描述
JAXPSun Microsystem的Java解析解析Java API(JAXP)
XML4JIBM的XML解析器(XML4J)
msxmlMicrosoft的XML解析器(msxml)2.0版内置到Internet Explorer 5.5中
4DOM4DOM是Python编程语言的解析器。
XML :: DOMXML :: DOM是使用Perl来处理XML文档的Perl模块。
XercesApache的Xerces Java解析器

在像DOM这样的基于树的API中,解析器遍历XML文件并创建相应的DOM对象。然后可以来回遍历DOM结构。

加载和解析XML

加载XML文档时,XML内容可以有两种形式:

内容为XML文件

以下示例演示了当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>

代码的大部分细节都在脚本代码中。

执行

将此文件另存为loadingexample.html并在浏览器中打开该文件,将显示如下输出:

装载示例

内容为XML字符string

以下示例演示了当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>

代码的大部分细节都在脚本代码中。

执行

将此文件另存为loadingexample.html并在浏览器中打开该文件,将显示如下输出:

装载示例

现在我们看到XML内容如何转换为JavaScript XML DOM,现在可以使用XML DOM方法访问任何XML元素。