在本章中,我们将研究XML 加载和解析.
为了描述由API,W3C使用称为接口定义语言(IDL)的抽象语言.使用IDL的优势在于开发人员可以学习如何使用他或她喜欢的语言使用DOM,并且可以轻松切换到另一种语言.
缺点是,因为它是抽象的,Web开发人员不能直接使用IDL.由于编程语言之间的差异,它们需要在抽象接口和它们的具体语言之间进行映射 - 或绑定. DOM已经映射到编程语言,如Javascript,JScript,Java,C,C ++,PLSQL,Python和Perl.
在以下章节和章节中,我们将使用Javascript作为我们用于加载XML文件的编程语言.
解析器是一个软件应用程序,旨在分析文档,在我们的案例中是XML文档,并根据信息做一些特定的事情.一些基于DOM的解析器列在下表 :
S.No | Parser&描述 |
---|---|
1 | JAXP Sun Microsystem用于XML分析的Java API(JAXP) |
2 | XML4J IBM的XML XML解析器(XML4J) |
3 | msxml Microsoft的XML解析器(msxml)版本2.0内置于Internet Explorer 5.5中 |
4 | 4DOM 4DOM是Python编程语言的解析器 |
5 | XML :: DOM XML :: DOM是使用Perl操作XML文档的Perl模块 |
6 | Xerces Apache的Xerces Java Parser |
在基于树的像DOM这样的API,解析器遍历XML文件并创建相应的DOM对象.然后你可以来回遍历DOM结构.
加载XML文档时,XML内容可以有两个表格 :
直接作为XML文件
作为XML字符串
以下示例演示了如何加载XML( node.xml )当XML内容作为XML文件接收时,使用Ajax和Javascript的数据.这里,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","https://img01.yuandaxia.cn/Content/img/tutorials/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>
<Company> <Employee category = "Technical" id = "firstelement"> <FirstName>Tanmay</FirstName> <LastName>Patil</LastName> <ContactNo>1234567890</ContactNo> <Email>tanmaypatil@xyz.com</Email> </Employee> <Employee category = "Non-Technical"> <FirstName>Taniya</FirstName> <LastName>Mishra</LastName> <ContactNo>1234667898</ContactNo> <Email>taniyamishra@xyz.com</Email> </Employee> <Employee category = "Management"> <FirstName>Tanisha</FirstName> <LastName>Sharma</LastName> <ContactNo>1234562350</ContactNo> <Email>tanishasharma@xyz.com</Email> </Employee> </Company>
代码的大部分细节都在脚本代码中.
Internet Explorer使用 ActiveXObject("Microsoft.XMLHTTP")创建XMLHttpRequest对象的实例,其他浏览器使用 XMLHttpRequest()方法.
responseXML 直接在XML DOM中转换XML内容.
将XML内容转换为JavaScript XML DOM后,您可以使用JS DOM方法和属性访问任何XML元素.我们使用了DOM属性,例如 childNodes , nodeValue 和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')方法.
变量 text 应包含XML内容的字符串.
将XML内容转换为JavaScript XML DOM后,您可以使用JS DOM方法和属性访问任何XML元素.我们使用了DOM属性,例如 childNodes , nodeValue .
将此文件另存为loadingexample.html并在浏览器中将其打开.您将看到以下输出 :
现在我们看到了XML内容如何转换为JavaScript XML DOM,您现在可以使用XML DOM方法访问任何XML元素.