首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

XML课程——采用DOM来解析XML

2012-12-20 
XML教程——采用DOM来解析XML?回页首解析文档的三步过程为了使用 XML 文件中的信息,必须解析该文件以创建 Do

XML教程——采用DOM来解析XML

?

解析文档的三步过程

为了使用 XML 文件中的信息,必须解析该文件以创建 Document 对象。

Document 对象是一个接口,所以不能直接实例化;相反,应用程序一般使用 factory。确切的过程随实现的不同而不同,但想法是相同的。在示例 JAXP 环境中,解析文件是一个三步过程:

    创建 DocumentBuilderFactory。该对象将创建 DocumentBuilder。创建 DocumentBuilder。 DocumentBuilder 将实际进行解析以创建 Document 对象。解析该文件以创建 Document 对象。

如果需要,在不必更改代码的情况下,JAXP 允许插进不同的解析器。让我们继续,开始构建应用程序。

基本的应用程序

从创建基本的应用程序,名为 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。

DOM 常用方法

    Document.getDocumentElement()
    返回文档的根(root)元素。 Node.getFirstChild() and Node.getLastChild()
    返回给定 Node 的第一个子女。 Node.getNextSibling() and Node.getPreviousSibling()
    这些方法返回下一个或前一个给定 Node 的同胞。 Node.getAttribute(attrName)
    对给定的 Node,返回给定名称的属性。例如,如果您要获得名为 id 属性的对象,可调用 getAttribute("id")。

编辑文档

    更改节点数据
    Node.setNodeValue(elemValue);

    添加节点
    String totalString = new Double(total).toString(); Node totalNode = doc.createTextNode(totalString);  //Document 对象创建新的文本节点,该节点带有作为值的 totalStringElement totalElement = doc.createElement("total"); //创建新元素 totaltotalElement.appendChild(totalNode);// 将节点添加到新的 total 元素。thisOrder.insertBefore(totalElement, thisOrder.getFirstChild()); //将新元素添加到 Document,指定新的 Node,然后指定新 Node 在 Node 之前

    除去节点
    Node deadNode = thisOrderItem.getParentNode().removeChild(thisOrderItem);

    替换节点
    Element backElement = doc.createElement("backordered");//创建新元素 backorderedNode deadNode = thisOrderItem.getParentNode().replaceChild(backElement,thisOrderItem);

    创建和设置属性
    Element backElement = doc.createElement("backordered");//创建新元素 backorderedbackElement.setAttributeNode(doc.createAttribute("itemid"));//创建新属性 itemidString itemIdString = thisOrderItem.getAttributeNode("itemid").getNodeValue();//取得thisOrderItem的属性itemid的值backElement.setAttribute("itemid", itemIdString);//设置backElement的属性item的值,可以省略createAttributeNode deadNode = thisOrderItem.getParentNode().replaceChild(backElement,thisOrderItem);

    除去属性
    Element thisOrder = (Element)orders.item(orderNum);Element customer = (Element)thisOrder.getElementsByTagName("cusomertid").item(0);customer.removeAttribute("limit");//去除属性limit

热点排行