dom規范和在Java中的實現(一) (二)(三)
sunmingdong
概念:
1、DOM就是一個對象化的XML數據接口;
2、一個與語言無關、與平台無關的標准接口規范;
3、它定義了Html文檔和XML文檔的邏輯結構;
4、給出了一種訪問和處理HTML文檔和XML文檔的方法(動態地創建文檔,遍歷文檔結構,添加、修改、刪除文檔內容,改變文檔的顯示方式等等)。
組成:
ü DOM由三部分組成,包括:核心(core)、HTML和XML。
ü 核心部分是結構化文檔比較底層對象的集合;
ü HTML接口和XML接口兩部分則是專為操作具體的HTML文檔和XML文檔所提供的高級接口,使對這兩類文件的操作更加方便。
版本:
ü 1998年8月18日通過的DOM Level 1;
ü 2000年3月7日 DOM Level 2;
ü DOM Level 3。
XML基本概念
XML 聲明:<?xml version="1.0" encoding="UTF-8"?>
DOCTYPE 聲明:<!DOCTYPE ORDERS SYSTEM "orders.dtd">
數據本身:<orders><order><customerid limit="1000">12341</customerid></order> </orders>
元素:
屬性:
文本:
文檔:
CData:<[CDATA[<b>Important: Please keep head and hands inside ride at <i>all times</i>.</b>]]>
注釋:<!--This is a comment. -->
處理指令:<?xml-stylesheet type="text/xsl" href="foo.xsl"?>
文檔片段:<item instock="Y" itemid="SA15">
<name>Silver Show Saddle, 16 inch</name>
<price>825.00</price>
<qty>1</qty>
</item>
<item instock="N" itemid="C49">
<name>Premium Cinch</name>
<price>49.00</price>
<qty>1</qty>
</item>
實體:
實體引用節點:
記號:
名字空間:
基本接口接口定義(java API package:org.w3c.dom):
類繼續圖(箭頭指向的是父類,另一端為子類)
1.Node接口
Node接口在整個DOM樹中具有舉足輕重的地位,DOM接口中有很大一部分接口是從Node接口繼續過來的,例如,Element、Attr、CDATASection等接口,都是從Node繼續過來的。在DOM樹中,Node接口代表了樹中的一個節點。
Field Summary
static short
ATTRIBUTE_NODE
The node is an Attr.
static short
CDATA_SECTION_NODE
The node is a CDATASection.
static short
COMMENT_NODE
The node is a Comment.
static short
DOCUMENT_FRAGMENT_NODE
The node is a DocumentFragment.
static short
DOCUMENT_NODE
The node is a Document.
static short
DOCUMENT_TYPE_NODE
The node is a DocumentType.
static short
ELEMENT_NODE
The node is an Element.
static short
ENTITY_NODE
The node is an Entity.
static short
ENTITY_REFERENCE_NODE
The node is an EntityReference.
static short
NOTATION_NODE
The node is a Notation.
static short
PROCESSING_INSTRUCTION_NODE
The node is a ProcessingInstruction.
static short
TEXT_NODE
The node is a Text node.
Method Summary
Node
appendChild(Node newChild)
將節點對象添加到本節點的子節點列表的末尾
Node
cloneNode(boolean deep)
創建新的節點對象,他是本節點的克隆,假如deep=true,他將包含本節點的所有子孫節點。
NamedNodeMap
getAttributes()
假如是節點,返回一個包含所有屬性的NamedNodeMap對象,否則為空。
NodeList
getChildNodes()
返回包含所有子節點的NodeList對象
Node
getFirstChild()
得到第一個子節點
Node
getLastChild()
得到最後一個子節點
java.lang.String
getLocalName()
返回本節點合法名字的本地部分
java.lang.String
getNamespaceURI()
返回本節點命名空間的URI,未指明的話返回null
Node
getNextSibling()
得到本節點的下一個兄弟節點
java.lang.String
getNodeName()
得到本節點的名字
short
getNodeType()
得到一個節點類型
java.lang.String
getNodeValue()
得到一個節點值
Document
getOwnerDocument()
返回本節點所屬的Document對象
Node
getParentNode()
得到父節點
java.lang.String
getPrefix()
返回本節點的命名空間前綴,假如未指定返回null
Node
getPreviousSibling()
得到本節點的上一個兄弟節點
boolean
hasAttributes()
返回是否有屬性
boolean
hasChildNodes()
返回本節點是否有任何子節點
Node
insertBefore(Node newChild, Node refChild)
在參考節點refChild前插入新節點newChild
boolean
isSupported(java.lang.String feature, java.lang.String version)
測試version版本的DOM規范是否支持feature特性
void
normalize()
Puts all Text nodes in the full depth of the sub-tree underneath this Node, including attribute nodes, into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separates Text nodes, i.e., there are neither adjacent Text nodes nor empty Text nodes.
Node
removeChild(Node oldChild)
從子節點列中刪除節點
Node
replaceChild(Node newChild, Node oldChild)
替換oldChild節點為newChild
void
setNodeValue(java.lang.String nodeValue)
void
setPrefix(java.lang.String prefix)
2.NodeList接口
NodeList接口提供了對節點集合的抽象定義,它並不包含如何實現這個節點集的定義。NodeList用於表示有順序關系的一組節點,比如某個節點的子節點序列。另外,它還出現在一些方法的返回值中,例如GetNodeByName。
在DOM中,NodeList的對象是"live"的,換句話說,對文檔的改變,會直接反映到相關的NodeList對象中。例如,假如通過DOM獲得一個NodeList對象,該對象中包含了某個Element節點的所有子節點的集合,那麼,當再通過DOM對Element節點進行操作(添加、刪除、改動節點中的子節點)時,這些改變將會自動地反映到NodeList對象中,而不需DOM應用程序再做其他額外的操作。
NodeList中的每個item都可以通過一個索引來訪問,該索引值從0開始。
Method Summary
int
getLength()
列表中節點長度
Node
item(int index)
返回第index個節點
3.NamedNodeMap接口
實現了NamedNodeMap接口的對象中包含了可以通過名字來訪問的一組節點的集合。不過注重,NamedNodeMap並不是從NodeList繼續過來的,它所包含的節點集中的節點是無序的。盡管這些節點也可以通過索引來進行訪問,但這只是提供了枚舉NamedNodeMap中所包含節點的一種簡單方法,並不表明在DOM規范中為NamedNodeMap中的節點規定了一種排列順序。
NamedNodeMap表示的是一組節點和其唯一名字的一一對應關系,這個接口主要用在屬性節點的表示上。
與NodeList相同,在DOM中,NamedNodeMap對象也是"live"的。
Method Summary
int
getLength()
得到映射中的節點個數
Node
getNamedItem(java.lang.String name)
通過唯一名字得到一個節點
Node
getNamedItemNS(java.lang.String namespaceURI, java.lang.String localName)
通過本地名和命名空間的URI得到唯一的節點
Node
item(int index)
得到在影射中的第index個節點
Node
removeNamedItem(java.lang.String name)
通過唯一名字刪除一個節點
Node
removeNamedItemNS(java.lang.String namespaceURI, java.lang.String localName)
通過本地名和命名空間刪除唯一的節點
Node
setNamedItem(Node arg)
用arg增加一個節點
Node
setNamedItemNS(Node arg)
用命名空間的URI和當地名增加一個節點
高級接口:
Interface Summary
Attr
代表元素對象的屬性
CDATASection
DTD或模式中的CDATA項用於將不希望被解釋為標記的文本塊“轉義”。在DTD中,使用<!CDATA…>聲明
CharacterData
在DOM中,提供一套方法和屬性操作字符數據
Comment
代表注釋元素的內容
Document
Document接口描述了整個HTML或XML文檔
DocumentFragment
DocumentFragment是一個輕量對象,他可以創建新的文檔片斷,然後將整個片斷插入到一有的文檔中
DocumentType
包含文檔的類型聲明或模式信息
DOMImplementation
該對象答應訪問與應用程序相關且獨立於任何特定的文檔對象模型實例的方法
Element
代表HTML/XML文檔中的元素,常見元素有:Element、Attr、Text
Entity
代表在DTD中以元素<!ENTITY…>聲明的解析的或未解析的實體
EntityReference
代表XML文檔中的實體引用節點,假如XML處理器在構建結構模型時展開了實體引用,樹中可能不會出現實體引用對象。
Notation
代表在DTD或模式中以元素<!NOTATION…>聲明表示法
ProcessingInstruction
代表通過’<?’和’?>’嵌入XML的指令,它提供了在XML文檔中保存與處理器相關的信息的方法
Text
代表元素節點或屬性節點的文本內容
重要的節點類型
從NODE派生出的幾個比較重要的節點類型有Document Element, Attribute,Text:
Document是DOM樹的根,它代表一個完整的XML文檔。它會有一些自己的子節點,至少應該有一個文檔元素的子節點,這個節點類型為Element,是XML文件最外層的根元素,此外他還可能有DocumentType(唯一),ProcessingInstruction,Comment這幾種作為子節點。
Element代表XML元素,是最常用的節點,它可以組成以它為根的DOM的子樹。他還可以有Element子節點,以及Attribut,Text,ProcessingInstruction,CDATASection,Comment子節點。
Attribute是XML元素的屬性,它的父節點必然是Element,它的子節點有Text和EntityReference;
Text代表元素節點或屬性節點的文本內容。