DOM=Document Object Model
是一个用来解析HTML/XML标准API;正常情况下,DOM将HTML/XML解析成一个树,树中由Node组成,Node的种类有element,attribute,text和others(比如CDATA,
注释,处理指令,文档片断等)。
一般而言,DOM的定义有三组,Level1,Level2,Level3;目前广泛使用的应当是Level3;通过DOM的接口之一
DOMImplementation,使用函数hasFeature,我们能清楚知道那些特性是否被支持。

在 Java 环境中,解析文件是一个三步过程:

  1. 创建 DocumentBuilderFactory DocumentBuilderFactory 对象创建 DocumentBuilder

  2. 创建 DocumentBuilder
    DocumentBuilder 执行实际的解析以创建 Document 对象。

  3. 解析文件以创建 Document 对象。

也就是说Document对象是在解析过程中动态生成的,它实际上是一个典型的树,将对HTML/XML文件的操作转换为对这个树的操作,这是我们要牢牢记住的一点。

常用的interface有:
1. 获得根节点

Element root = doc.getDocumentElement();

2. 遍历孩子节点

  for (Node child = root.getFirstChild(); 
child != null;
child = child.getNextSibling())
{
System.out.println(start.getNodeName()+" = "
+start.getNodeValue());
}

3. 属性操作

      if (start.getNodeType() == start.ELEMENT_NODE) 
{
NamedNodeMap startAttr = start.getAttributes();
for (int i = 0;
i < startAttr.getLength();
i++) {
Node attr = startAttr.item(i);
System.out.println(" Attribute: "+ attr.getNodeName()
+" = "+attr.getNodeValue());
}
}

4. 更改节点值

      if (start.getNodeName().equals(elemName)) {
start.getFirstChild().setNodeValue(elemValue);

}


5. 添加节点

    Node totalNode = doc.createTextNode(totalString);

Element totalElement = doc.createElement("total");
totalElement.appendChild(totalNode);

thisOrder.insertBefore(totalElement, thisOrder.getFirstChild());

6. 删除节点

  if (thisOrderItem.getAttributeNode("instock")
.getNodeValue().equals("N")) {

Node deadNode =
thisOrderItem.getParentNode().removeChild(thisOrderItem);

7. 替换节点

   if (thisOrderItem.getAttributeNode("instock")
.getNodeValue().equals("N")) {

Element backElement = doc.createElement("backordered");

Node deadNode = thisOrderItem.getParentNode()
.replaceChild(backElement, thisOrderItem);

8. 创建和设置属性

if (thisOrderItem.getAttributeNode("instock")
.getNodeValue().equals("N")) {

Element backElement = doc.createElement("backordered");

backElement.setAttributeNode(doc.createAttribute("itemid"));

String itemIdString =
thisOrderItem.getAttributeNode("itemid").getNodeValue();
backElement.setAttribute("itemid", itemIdString);

8. 删除属性

Element thisOrder = (Element)orders.item(orderNum);

Element customer =
(Element)thisOrder.getElementsByTagName("customerid")
.item(0);
customer.removeAttribute("limit");

Advertisements