XML解析在JavaScript中的定义
XML解析在JavaScript中的定义是:它是一种软件包或库,它为客户端应用程序提供了一个处理XML文档的接口,它在JavaScript中被用来将XML文档转化为可读的形式,如今在许多浏览器中,已经有了内置的XML解析器,它能够检查XML文档的格式并进行验证,我们可以说,XML解析器的主要目的是将XML文档转化为人类可以阅读的代码。
什么是JavaScript中的XML解析?
许多浏览器都有一个内置的XML解析器,可以将XML文档转化为人类可读的格式,我们也可以说,XML解析器是一个软件包,可以与XML文档交互,检查文档的格式,并通过客户端应用程序来验证它,因为操作来自XML文件的数据是相当困难的。XML解析器在客户端应用程序和XML文件之间工作,它的工作是验证通过它的文件,它主要是为XML文件设计的,它有读取XML文件的程序。XML解析与所有的浏览器一起工作,以读取和写入它,它有一个简单的API。因为它有一个DOM解析器和SAX解析器,可以帮助解析文本、解析字符串和解析文件。
很久以前,XML解析器已经被添加到浏览器中,而JavaScript需要为其他语言添加一个新的解析器,以便为其他语言定义数据结构,从而实现数据的序列化。
在JavaScript中,有两个主要的解析器可用:
DOM解析器以XML文档对象的形式包含了XML文档的所有信息,它的API非常简单,用于执行读写操作,它由DOM解析器实现,它可以创建像树状结构一样的文档,当我们需要以随机的方式访问文档时,它是有优势的,但它的缺点是比其他解析器慢,它消耗更多的内存,因为完整的文档需要加载到内存中,所以它需要更多内存。
XML的简单API是用来实现API的,它是基于事件的,它不创建任何内部结构。它的客户不知道哪个方法可以调用它,只知道覆盖这个方法并在里面放置自己的代码。这种API的优点是它有一个简单的API,它的内存非常有效,而且它可以处理巨大的文件,速度非常快,但它的缺点是它的API不太直观,因为它是基于事件的,它把数据分成几块,所以客户不知道关于它的全部信息。
实例
在JavaScript中进行XML解析。
例子 #1
<html>
<body>
<p id="demo">p>
<script>
var text, parser, xmlDoc;
text = "" +
"All type of food available " +
"Indian dish " +
"5th september " +
"";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
script>
body>
html>
输出
在上面的代码中,我们看到了一个将文本解析为XML文档对象的例子,并尝试用JavaScript从中提取信息,我们以一个带有标题的食品店为例,我们采取了文本、解析器和XML文档,通过使用该方法,我们必须通过XML文档对象来解析我们的文本,并在上面给出输出。
例子#2
Important message
To: id="to">
from: id="from">
Message: id="message">
";
txt5="";
txt=txt1+txt2+txt3+txt4+txt5;
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;