使用Xerces-J的DOM方式进行XML程序设计
--Node
Node
Node是DOM中最重要的一个界面,是所有DOM对象的基础,要掌握DOM就必须熟悉理解Node,因此Node是我们介绍的重点。
Node(节点)可以用来描述XML文档中的任何级别的元素,一个文档可以被称作一个Node(节点),一个<…/>表示的部分可以被称作一个Node,一个用<…>…</…>表示的部分可以被称作一个Node,一个属性可以被称作Node,一段注释可以被称作Node,一条处理指令可以被称作Node,一段文字也是Node,总而言之,一个XML文档用DOM表示出来后就是由Node(节点)组成的一棵树。
下面我们介绍Node界面中定义的数据和方法。表2列出了Node中定义的数据,表3列出了Node中定义的方法。
数据 | 意义 |
short ATTRIBUTE_NODE | 表示这个节点是一个Attr。 |
short CDATA_SECTION_NODE | 表示这个节点是一个CDATASection。 |
short COMMENT_NODE | 表示这个节点是一个Comment。 |
short DOCUMENT_FRAGMENT_NODE | 表示这个节点是一个DocumentFragment。 |
short DOCUMENT_NODE | 表示这个节点是一个Document。 |
short DOCUMENT_TYPE_NODE | 表示这个节点是一个DocumentType。 |
short ELEMENT_NODE | 表示这个节点是一个Element。 |
short ENTITY_NODE | 表示这个节点是一个Entity。 |
short ENTITY_REFERENCE_NODE | 表示这个节点是一个EntityReference。 |
short NOTATION_NODE | 表示这个节点是一个Notation。 |
short PROCESSING_INSTRUCTION_NODE | 表示这个节点是一个ProcessingInstruction。 |
short TEXT_NODE | 表示这个节点是一个Text。 |
这些数据可以同Node界面中的getNodeType()方法协同使用,区分Node的类型。下面的一段程序演示了使用这些数据区分不同节点类型的基本方法。
表3中提供了Node节点提供的方法及其使用说明。这些方法是由W3C为DOM制定的,不但在xml中可以使用,在支持DOM标准的HTML中一样可以使用。
方法 | 使用说明 |
Node appendChild(Node newChild) | 在这个节点中增加一个子节点。这个新增加的子节点将被添加在子节点队列的尾部。如果参数实际上是一个DocumentFragment,其全部内容会被加入到子节点队列中。返回值为被添加的节点。 |
Node cloneNode(boolean deep) | 这个方法复制这个节点,参数控制是否复制子节点,但是如果存在属性会复制所有的属性,包括由DTD定义产生的缺省属性。需要注意的是这个方法返回的节点不包括父节点属性,即getParentNode()返回null。 |
NamedNodeMap getAttributes() | 返回一个包含所有的属性(Attributes)的NamedNodeMap。如果没有,则返回null。 |
NodeList getChildNodes() | 返回一个包含所有的子节点的NodeList。或返回一个不包含任何节点的NodeList。 |
Node getFirstChild() | 返回第一个子节点。若没有则返回null。 |
Node getLastChild() | 返回最后一个子节点。若没有则返回null。 |
String getLocalName() | 返回不包括名空间的局域名,若该节点不支持名空间,则返回null。 |
String getNamespaceURI() | 返回节点的名空间URI,若没有,则返回null,而不是空的字符串。 |
Node getNextSibling() | 返回这个节点后面的兄弟节点,如果没有,则返回null。Sibling为兄弟的意思。 |
String getNodeName() | 返回节点的名字。 |
short getNodeType() | 返回节点的类型,其类型如表2。 |
String getNodeValue() | 返回节点的值。 |
Document getOwnerDocument() | 返回包含此节点的Document。 |
Node getParentNode() | 返回父节点。 |
String getPrefix() | 返回名空间的前置部分。 |
Node getPreviousSibling() | 返回前一个兄弟节点。若没有,则返回null。 |
boolean hasAttributes() | 返回是否有属性。 |
boolean hasChildNodes() | 返回是否有子节点。 |
Node insertBefore(Node newChild, Node refChild) | 在制定的节点处插入一个节点,插入的节点作为第一个参数,插入位置作为第二个参数。 |
boolean isSupported( String feature, String version) | 测试解析器是否支持某些特性和版本号。 |
void normalize() | 调用此方法可以合并相邻的Text节点,消除空的Text节点。 |
Node removeChild(Node oldChild) | 从子节点队列中去除一个节点,然后返回该节点。 |
Node replaceChild(Node newChild, Node oldChild) | 用第一个参数制定的节点取代用第二个参数制定的子节点。 |
void setNodeValue(String nodeValue) | 设置节点的值。 |
void setPrefix(java.lang.String prefix) | 设置名空间的前置值。 |