XML认证知识点:DOM Parser

发布时间:2016-11-10 00:00:00 编辑:嘉辉 手机版

  DOM Document 是以层次结构组织起来的节点,或信息片段的集合。这种层次结构允许开发者浏览树来查找特定信息。通常,分析结构需要在完成任何工作之前装入整个文档并且装入层次结构。

  基本的应用程序

  从创建基本的应用程序,名为 OrderProcessor 的类开始。

  import javax.xml.parsers.DocumentBuilder;

  import javax.xml.parsers.DocumentBuilderFactory;

  import java.io.File;

  import org.w3c.dom.Document;

  public class OrderProcessor {

  public static void main (String args[]) {

  File docFile = new File("orders.xml");

  Document doc = null;

  try {

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

  DocumentBuilder db = dbf.newDocumentBuilder();

  doc = db.parse(docFile);

  } catch (Exception e) {

  System.out.print("Problem parsing the file.");

  }

  }

  }

  首先,Java 导入必要的类,然后创建 OrderProcessor 应用程序。在本教程中的这个示例将只处理一个文件,所以为简短起见,该应用程序包含对它的直接引用。

  应用程序在 try-catch 块外部定义了 Document 对象,以便在后面使用该对象。try-catch 使您能执行可能会抛出异常的一些操作,这样不会危及整个应用程序。如果异常抛出,则应用程序简单地执行相应的 catch 代码。

  在 try-catch 块内部,应用程序创建 DocumentBuilderFactory,然后使用它来创建 DocumentBuilder。最后,DocumentBuilder 解析该文件以创建 Document。

  编辑文档

  更改节点数据

  Node.setNodeValue(elemValue);

  添加节点

  String totalString = new Double(total).toString();

  Node totalNode = doc.createTextNode(totalString);

  //Document 对象创建新的文本节点,该节点带有作为值的 totalString

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

  //创建新元素 total

  totalElement.appendChild(totalNode);

  // 将节点添加到新的 total 元素。

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

  //将新元素添加到 Document,指定新的 Node,然后指定新 Node 在 Node 之前

  除去节点

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

  替换节点

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

  //创建新元素 backordered

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

  创建和设置属性

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

  //创建新元素 backordered

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

  //创建新属性 itemid

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

  //取得thisOrderItem的属性itemid的值

  backElement.setAttribute("itemid", itemIdString);

  //设置backElement的属性item的值,可以省略createAttribute

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

  除去属性

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

  Element customer = (Element)thisOrder.getElementsByTagName("cusomertid").item(0);

  customer.removeAttribute("limit");

  //去除属性limit

本文已影响948
+1
0