DOM的基本对象有5个:Document,Node,NodeList,Element和Attr。
Common node types :
Interface | nodeType constant | nodeType value |
---|---|---|
Element | Node.ELEMENT_NODE | 1 |
Text | Node.TEXT_NODE | 3 |
Document | Node.DOCUMENT_NODE | 9 |
Comment | Node.COMMENT_NODE | 8 |
DocumentFragment | Node.DOCUMENT_FRAGMENT_NODE | 11 |
Attr | Node.ATTRIBUTE_NODE | 2 |
此外,Document还包含了创建其它节点的方法,比如createAttribut()用来创建一个Attr对象。它所包含的主要的方法有:
createAttribute(String):用给定的属性名创建一个Attr对象,并可在其后使用setAttributeNode方法来放置在某一个Element对象上面。
createElement(String):用给定的标签名创建一个Element对象,代表XML文档中的一个标签,然后就可以在这个Element对象上添加属性或进行其它的操作。
createTextNode(String):用给定的字符串创建一个Text对象,Text对象代表了标签或者属性中所包含的纯文本字符串。如果在一个标签内没有其它的标签,那么标签内的文本所代表的Text对象是这个Element对象的唯一子对象。
getElementsByTagName(String):返回一个NodeList对象,它包含了所有给定标签名字的标签。
getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的那个对象。
Node对象是DOM结构中最为基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少会真正的用到Node这个对象,而是用到诸如Element、Attr、Text等Node对象的子对象来操作文档。Node对象为这些对象提供了一个抽象的、公共的根。虽然在Node对象中定义了对其子节点进行存取的方法,但是有一些Node子对象,比如Text对象,它并不存在子节点,这一点是要注意的。Node对象所包含的主要的方法有:
appendChild(org.w3c.dom.Node):为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。
getFirstChild():如果节点存在子节点,则返回第一个子节点,对等的,还有getLastChild()方法返回最后一个子节点。
getNextSibling():返回在DOM树中这个节点的下一个兄弟节点,对等的,还有getPreviousSibling()方法返回其前一个兄弟节点。
getNodeName():根据节点的类型返回节点的名称。
getNodeType():返回节点的类型。
getNodeValue():返回节点的值。
hasChildNodes():判断是不是存在有子节点。
hasAttributes():判断这个节点是否存在有属性。
getOwnerDocument():返回节点所处的Document对象。
insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在给定的一个子对象前再插入一个子对象。
removeChild(org.w3c.dom.Node):删除给定的子节点对象。
replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一个新的Node对象代替给定的子节点对象。
NodeList对象,顾名思义,就是代表了一个包含了一个或者多个Node的列表。可以简单的把它看成一个Node的数组,我们可以通过方法来获得列表中的元素:
GetLength():返回列表的长度。
Item(int):返回指定位置的Node对象。
Element对象代表的是XML文档中的标签元素,继承于Node,亦是Node的最主要的子对象。在标签中可以包含有属性,因而Element对象中有存取其属性的方法,而任何Node中定义的方法,也可以用在Element对象上面。
getElementsByTagName(String):返回一个NodeList对象,它包含了在这个标签中其下的子孙节点中具有给定标签名字的标签。
getTagName():返回一个代表这个标签名字的字符串。
getAttribute(String):返回标签中给定属性名称的属性的值。在这儿需要主要的是,应为XML文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。这时候需要用到getAttributeNodes()方法来得到一个Attr对象来进行进一步的操作。
getAttributeNode(String):返回一个代表给定属性名称的Attr对象。
Attr对象代表了某个标签中的属性。Attr继承于Node,但是因为Attr实际上是包含在Element中的,它并不能被看作是Element的子对象,因而在DOM中Attr并不是DOM树的一部分,所以Node中的getparentNode(),getpreviousSibling()和getnextSibling()返回的都将是null。也就是说,Attr其实是被看作包含它的Element对象的一部分,它并不作为DOM树中单独的一个节点出现。这一点在使用的时候要同其它的Node子对象相区别。
文字必须保存在文本节点内。例如:在<year>2005</year>中,包含一个元素节点(year),在它的下面包含了一个文字节点,其中的文字为(2005)。
- < bookstore >
- < book category ="COOKING" >
< title lang ="en" > Everyday Italian </ title >
< author > Giada De Laurentiis </ author >
< year > 2005 </ year >
< price > 30.00 </ price >
</ book >
- < book category ="CHILDREN" >
< title lang ="en" > Harry Potter </ title >
< author > J K. Rowling </ author >
< year > 2005 </ year >
< price > 29.99 </ price >
</ book >
- < book category ="WEB" >
< title lang ="en" > XQuery Kick Start </ title >
< author > James McGovern </ author >
< author > Per Bothner </ author >
< author > Kurt Cagle </ author >
< author > James Linn </ author >
< author > Vaidyanathan Nagarajan </ author >
< year > 2003 </ year >
< price > 49.99 </ price >
</ book >
- < book category ="WEB" >
< title lang ="en" > Learning XML </ title >
< author > Erik T. Ray </ author >
< year > 2003 </ year >
< price > 39.95 </ price >
</ book >
</ bookstore >
下述代码片段将获取来自于第一个<title>元素的文本:
getElementsByTagName("title")[0].childNodes[0].nodeValue |
输出结果:
Everyday Italian |
节点列表包含一个非常实用的属性:length [ 长度 ]。length [ 长度 ] 属性返回了节点列表中的节点数量。
getElementsByTagName('title').length
下述代码片段将获取来自于第一个<title>元素的属性数量:
getElementsByTagName('title')[0].attributes.length |
输出结果:
1 |
getNamedItem()方法可以用于获取一个指定的节点。
下述代码片断将展示输出每个<book> 元素中“category”属性的值的方法:
xmlDoc=loadXMLDoc("books.xml"); var x=xmlDoc.getElementsByTagName("book"); for(i=0;i<x.length;i++) |
输出结果:
COOKING |
<html> <script type="text/javascript"> var text="<note>"; // code for IE // documentElement always represents the root node for (i=0;i<x.childNodes.length;i++) </script> </body> |
输出结果:
to=Tove |
该案例将通过getElementsByTagname()方法来获得"book.xml"中的所有"title"元素值。
该案例将通过getAttribute()方法来获得"book.xml"中所有"category"的属性值。
xmlDoc=loadXMLDoc("books.xml");
var x=xmlDoc.getElementsByTagName('book');
for (i=0;i<x.length;i++)
{
document.write(x[i].getAttribute('category'));
document.write("<br />");
}