第2天 XML解析-dom、SAX、dom4j

XML解析技术概述

  XML解析方式分为两种:dom和sax

l  dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的解析XML 的一种方式。

l  sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML解析器都支持它。

XML解析器:Crimson(sun)、Xerces(IBM)、Aelfred2(dom4j)

XML解析开发包:Jaxp(sun)、Jdom、dom4j、pull(android的sdk自带)

1 JAXP DOM解析 

  JAXP是 Sun 提供的一套XML解析API,很好的支持DOM和SAX解析方式。JAXP 开发包是J2SE的一部分,包括以下包或子包:javax.xml、org.w3c.dom 、org.xml.sax、

  在 javax.xml.parsers 包中,定义了几个工厂类,程序员调用这些工厂类,可以得到对xml文档进行解析的 DOM 或 SAX 的解析器对象。

DOM树形结构

 

例:DOM解析实例1

book.xml文档

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="b001">
        <title>java 核心技术</title>
        <price>95</price>
    </book>
    <book id="b002">
        <title>Javaking</title>
        <price>33</price>
    </book>
</books>
public static void main(String[] args) throws Exception {
        //获得实例工厂
        DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
        //获得解析
        DocumentBuilder builder =fac.newDocumentBuilder();
        //获得document-解析xml文档  ,文件找不到异常: java.io.FileNotFoundException
        Document document = builder.parse("books.xml");//指java项目的根路径下的文件
        //获得所有的book元素        
        NodeList bookElements = document.getElementsByTagName("book");
        //遍历所有的book元素
        for(int i=0;i<bookElements.getLength();i++){
            //获得每一本书
            Node node =bookElements.item(i);
            //将book转换成element(强制转换)
            Element bookEle = (Element)node;
            //获得id属性
            String id = bookEle.getAttribute("id");
            System.out.println(node.getNodeName() + "  " + id);
            //获得子元素
            NodeList cEle = bookEle.getChildNodes();
            String  childName ="";
            //遍历所有子元素
            for(int j=0;j<cEle.getLength();j++){
                //获得子元素的名称
                childName = cEle.item(j).getNodeName();
                //判断子元素是否是“title”
                if("title".equals(childName))
                {
                    //获得子元素的文本
                    String title=cEle.item(j).getTextContent();
                    System.out.println( "\t"+ childName+" " + title );
                }
                if("price".equals(childName)){
                    String price = cEle.item(j).getTextContent();
                    System.out.println("\t"+ childName+" " + price );
                }
            }
        }    
    }

运行结果:

book  b001

    title java 核心技术

    price 95

book  b002

    title Javaking

    price 33

更多使用方法详见JDK1.6API,在javax.xml包下找到parsers,从里面的DocumentBuilder类开始。

使用DOM方式解析XML

(1)解析器工厂类DocumentBuilderFactory

  • DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

(2)解析器类DocumentBuilder

  • DocumentBuilder db = dbf.newDocumentBuilder();

(3)解析生成Document对象

  • Document doc = db.parse("message.xml");

(4)通过Document对象查询节点

  • document.getElementById   返回Node对象
  • document.getElementsByTagName  返回NodeList对象

节点列表类NodeList:

l  节点列表类NodeList就是代表了一个包含一个或者多个Node的列表

l  可以简单的把它看成一个Node的数组

l  常用方法

  • getLength():返回列表的长度。
    •  ArrayList size
  • item(int):返回指定位置的Node对象
    • ArrayList get(index)

 

posted @ 2016-11-07 11:53  bizhenLiu  阅读(282)  评论(0编辑  收藏  举报