解析XML文档方式之一:dom方式

一、简介:     

    用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。

JAXP接口包含了三个包:

(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。

(2)org.xml.sax  用于对XML进行语法分析的事件驱动的XML简单API(SAX)

(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。

 

      DOM为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。

     优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;

     缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

 

二、dom解析xml文档实例:

  (1)、Books.xml 文档:

         <?xml version="1.0" encoding="UTF-8"?> <books> <book email="[email protected]"> <name>张三</name> <price>36.2</price> </book> <book email="[email protected]"> <name>李四</name> <price>88.2</price> </book> </books>

 

  (2)、dom解析Books.xml测试代码:

 

        package com.hmk.dom; import java.io.FileInputStream; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * DOM方式解析xml文档 * @author hmk * */ public class TestDomPxml { public static void main(String []args){ try { //得到DOM解析器的工厂实例 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //从DOM工厂获得DOM解析器 DocumentBuilder documentBuilder = dbFactory.newDocumentBuilder(); //把xml文档转化为输入流,以便DOM解析器解析它 InputStream is = new FileInputStream("bin/com/hmk/dom/Books.xml"); //解析xml文档的输入流,得到一个Document对象 Document doc = documentBuilder.parse(is); //得到xml文档的根节点 Element boot = doc.getDocumentElement(); //得到根节点的子节点 NodeList books = boot.getChildNodes(); if (books!=null) { for (int i = 0; i < books.getLength(); i++) { Node book = books.item(i); if (book.getNodeType()==Node.ELEMENT_NODE) { //得到节点的属性 String email = book.getAttributes().getNamedItem("email").getNodeValue(); System.out.println("email:"+email); for (Node node = book.getFirstChild();node!=null;node= node.getNextSibling()) { if (node.getNodeType()==Node.ELEMENT_NODE) { if (node.getNodeName().equals("name")) { String name1 = node.getFirstChild().getNodeValue(); System.out.println("name1:"+name1); } if (node.getNodeName().equals("price")) { String price = node.getFirstChild().getNodeValue(); System.out.println(price); } } } } } } } catch (Exception e) { e.printStackTrace(); } } }

 

 

 

三、总结:

 
DOM是一些节点的集合,由于文档中可能包含有不同类型的信息,所以定义了几种不同类型的节点。DOM中最常见的节点类型有:
(1)元素:

元素是XML的基本构件。元素的子节点可以是其它元素、文本节点或两者都有。元素节点还可以只含有属性这一唯一类型的节点。


(2)属性:

属性节点包含关于元素节点的信息,但它不是元素的子节点

(3)文本:

文本节点文本信息,或干脆是空白的文本。

(4)文档:

文档节点是整个文档中所有其它节点的父节点

 

你可能感兴趣的:(xml,String,文档,email,books,Parsing)