您的位置:首页 > 其它

XML DOM完全参考手册(二)DOM节点

2016-07-26 17:56 453 查看


解析 XML DOM

大多数浏览器都内建了供读取和操作 XML 的 XML 解析器。

解析器把 XML 转换为 JavaScript 可存取的对象。


解析 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");
xmlDoc.async="false";
xmlDoc.load("books.xml");



代码解释:

第一行创建空的微软 XML 文档对象
第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 "books.xml" 的文档

下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);
注释:loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。


在 Firefox 及其他浏览器中的 XML 解析器

下面的 JavaScript 片段把 XML 文档 ("books.xml")
载入了解析器:

<span style="background-color: rgb(249, 249, 249);">x</span><span style="background-color: rgb(255, 255, 255);">mlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";
xmlDoc.load("books.xml");</span>


代码解释:

第一行创建空的 XML 文档对象
第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 "books.xml" 的文档

下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:

<span style="background-color: rgb(255, 255, 255);">parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");</span>



代码解释:

第一行创建一个空的 XML 文档对象
第二行告知解析器加载名为 txt 的字符串

注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
<span style="background-color: rgb(255, 255, 255);"><html>
<body>
<script type="text/javascript">
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
xmlDoc=document.implementation.createDocument("","",null);
}
catch(e) {alert(e.message)}
}
try
{
xmlDoc.async=false;
xmlDoc.load("books.xml");
document.write("xmlDoc is loaded, ready for use");
}
catch(e) {alert(e.message)}
</script>
</body>
</html></span>



解析 XML 字符串 - 一个跨浏览器的实例

下面的代码加载并解析了一个 XML 字符串:
<span style="background-color: rgb(255, 255, 255);"><html>
<body>
<script type="text/javascript">
text="<bookstore>"
text=text+"<book>";
text=text+"<title>Harry Potter</title>";
text=text+"<author>J K. Rowling</author>";
text=text+"<year>2005</year>";
text=text+"</book>";
text=text+"</bookstore>";

try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,"text/xml");
}
catch(e) {alert(e.message)}
}
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html></span>



XML DOM 访问节点

function loadXMLDoc(dname)
{
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
xmlDoc=document.implementation.createDocument("","",null);
}
catch(e) {alert(e.message)}
}
try
{
xmlDoc.async=false;
xmlDoc.load(dname);
return(xmlDoc);
}
catch(e) {alert(e.message)}
return(null);
}
一个通用的加载XML的方法;


访问节点

您可以通过三种方法来访问节点:

通过使用 getElementsByTagName() 方法
通过循环(遍历)节点树
通过利用节点的关系在节点树中导航

循环遍历访问title节点

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title");
for (i=0;i<x.length;i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write("<br />");
}


例子解释:

使用 loadXMLDoc()
"books.xml" 载入 xmlDoc
取得所有 <title> 元素节点
输出每个 <title> 元素的文本节点的值


Node Type

XML 文档的 documentElement 属性是根节点。

节点的 nodeName 属性是节点的名称。

节点的 nodeType 属性是节点的类型。


遍历节点

下面的代码循环根节点的子节点,同时也是元素节点:
xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.documentElement.childNodes;

for (i=0;i<x.length;i++)
{
if (x[i].nodeType==1)
{//Process only element nodes (type 1)
document.write(x[i].nodeName);
document.write("<br />");
}
}


例子解释:

通过使用 loadXMLDoc()
"books.xml" 载入 xmlDoc 中
获得根元素的子节点
检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点
如果是元素节点,则输出节点的名称


XML DOM 节点信息


节点的属性

在 XML 文档对象模型 (DOM) 中,每个节点都是一个对象。

对象拥有方法(功能)和属性(关于对象的信息),并可通过 JavaScript 进行访问和操作。

三个重要的 XML DOM 节点属性是:

nodeName
nodeValue
nodeType


nodeName 属性

nodeName 属性规定节点的名称。

nodeName 是只读的
元素节点的 nodeName 与标签名相同
属性节点的 nodeName 是属性的名称
文本节点的 nodeName 永远是 #text
文档节点的 nodeName 永远是 #document


nodeValue 属性

nodeValue 属性规定节点的值。

元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值


更改元素的值

下面的代码更改第一个 <title> 元素的文本节点的值:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.nodeValue="Easy Cooking";


代码解释:

通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
获取第一个 <title> 元素节点的文本节点
把文本节点的值更改为 "Easy Cooking"


nodeType 属性

nodeType 属性规定节点的类型。

nodeType 是只读的。


最重要的节点类型是:

元素类型节点类型
元素1
属性2
文本3
注释8
文档9

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: