节点
DOM 是这样规定的:
整个文档是一个文档节点
每个 XML 元素是一个元素节点
包含在 XML 元素中的文本是文本节点
每一个 XML 属性是一个属性节点
注释是注释节点
在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。
不过,元素节点的文本是存储在文本节点中的。
在这个实例中:<year>2005</year>
,元素节点 <year>
,拥有一个值为 “2005” 的文本节点。
“2005” 不是 <year>
元素的值!
节点树
XML DOM 把 XML 文档视为一棵节点树。
加载函数
为了让加载函数便于管理,可以把加载函数写成一个函数,然后使用时从脚本中调用:
loadxmldoc.js
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
xhttp.send();
return xhttp.responseXML;
}
<html>
<head>
<script src="loadxmldoc.js">
</script>
</head>
<body>
<script>
xmlDoc=loadXMLDoc("books.xml");
code goes here.....
</script>
</body>
</html>
DOM属性
一些典型的 DOM 属性:
x.documentElement - x的根节点
x.nodeName - x 的名称
nodeName 是只读的
元素节点的 nodeName 与标签名相同
属性节点的 nodeName 是属性的名称
文本节点的 nodeName 永远是 #text
文档节点的 nodeName 永远是 #document
x.nodeValue - x 的值
元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本本身
属性节点的 nodeValue 是属性的值
x.parentNode - x 的父节点
x.childNodes - x 的子节点
x.attributes - x 的属性节点
三个重要的节点属性是:
nodeName:只读,规定节点名称
nodeValue:规定节点的值,注意元素节点的值是undefined
nodeType:规定节点的类型,只读,元素节点类型值是1,属性是2,文本是3,注释是8,文档是9
获取节点
getElementsByTagName()-通过标签名获取元素对象
getAttribute()-获取对象属性值
getAttributeNode()-获取对象属性节点
改变节点
在 DOM 中,每种成分都是节点。元素节点没有文本值。元素节点的文本存储在子节点中。该节点称为文本节点。改变元素文本的方法,就是改变这个子节点(文本节点)的值。
对于属性节点,可以通过使用 setAttribute() 方法或属性节点的 nodeValue 属性来实现这个效果
<script>
xmlDoc=loadXMLDoc("helloXml.xml");
x=xmlDoc.getElementsByTagName("book")[0];
x.setAttribute("category","food");//用setAttribute改变属性
document.write(x.getAttribute("category")+"<br>");
y=x.getAttributeNode("category");//获取属性节点
y.nodeValue="en";//改变属性节点的值
document.write(x.getAttribute("category"));
</script>