所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。
解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。
【本文是在阅读www.w3school.com.cn的教程时随手记下的内容,以免遗忘】
解析 XML
所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。
解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。
微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。
通过微软的 XML 解析器加载 XML
微软的 XML 解析器内建于 Internet Explorer 5 及更高版本中。
下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc.async="false";
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc.load("books.xml");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
代码解释:
- 第一行创建空的微软 XML 文档对象
- 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
- 第三行告知解析器加载名为 "books.xml" 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc.async="false";
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc.loadXML(txt);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
注释:loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。
在 Firefox 及其他浏览器中的 XML 解析器
下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
xmlDoc=document.implementation.createDocument("","",null);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc.async="false";
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc.load("books.xml");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
代码解释:
- 第一行创建空的 XML 文档对象
- 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
- 第三行告知解析器加载名为 "books.xml" 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
parser=new DOMParser();
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlDoc=parser.parseFromString(txt,"text/xml");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
代码解释:
- 第一行创建一个空的 XML 文档对象
- 第二行告知解析器加载名为 txt 的字符串
注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
解析 XML 文件 - 一个跨浏览器的实例
下面的例子把 XML 文档 ("books.xml") 载入 XML 解析器:
<html>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<body>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
<script type="text/javascript">
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try //Internet Explorer
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch(e)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try //Firefox, Mozilla, Opera, etc.
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc=document.implementation.createDocument("","",null);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch(e)
{alert(e.message)}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc.async=false;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc.load("books.xml");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
document.write("xmlDoc is loaded, ready for use");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch(e)
{alert(e.message)}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
</script>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</body>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</html>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
加载函数
XML DOM 含有遍历 XML 树以及访问、插入、删除节点的方法(函数)。
然后,在访问并处理 XML 文档之前,必须把它载入 XML DOM 对象。
上一节演示了如何加载 XML 文档。为了避免因加载文档而重复编写代码,可以把代码存储在一个单独的 JavaScript 文件中:
function loadXMLDoc(dname)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try //Internet Explorer
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch(e)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try //Firefox, Mozilla, Opera, etc.
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc=document.implementation.createDocument("","",null);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch(e)
{alert(e.message)}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc.async=false;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
xmlDoc.load(dname);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return(xmlDoc);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch(e)
{alert(e.message)}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return(null);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)