winfwu

导航

Dom解析-----详解

(1)什么是Dom解析:

  Dom解析(Document Object Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成Dom对象树。这样便能根据树的结构,已节点形式对文档进行操作。解析XML文件要比解析字符串,解析Properties文件要复杂的多,需要建立不止一个工具类对象。

 

(2)简单示例

  articles.xml

View Code
<articles>
    <article category="xml">
        <title> XML 概述</title>
        <author>janet</author>
        <email>winfu@163.com</email>
        <date>20080801</date>
    </article >
        
    <article category="java">
    <title> Java 基本语法</title>
        <author>janet</author>
        <email>winfu@163.com</email>
        <date>20080801</date>
    </article>
</articles>

     DomDemo.java

View Code
package TestFor0330;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomDemo {

    public static void main(String[] args) {
        // 创建解析的XML文档对象,其保存在根目录下的Article.xml文件
        File xmlFile = new File("article.xml");

        /*
         * Dom树解析方式
         */
        // 声明一个DocumentBuilder对象,抽象类不能直接创建,可以通过DocumentFactory来构建
        DocumentBuilder builder = null;
        // 声明一个DocumentBuilderFactory对象,通过单例模式创建
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                .newInstance();

        try {
            // 获取默认的newDocumentBuilder
            builder = builderFactory.newDocumentBuilder();
            // 解析文件
            Document document = builder.parse(xmlFile);
            // 获取根元素
            Element root = document.getDocumentElement();

            System.out.println("根元素:" + root.getNodeName());
            // 获取根元素底下子节点
            NodeList childNodes = root.getChildNodes();
            for (int i = 0; i < childNodes.getLength(); i++) {
                // 遍历这些子节点
                Node node = childNodes.item(i);
                // 对子节点进行判断
                if ("article".equals(node.getNodeName())) {
                    // 如果节点的名称为article
                    // 输出article元素属性Category
                    System.out.println("\r\n找到一篇文章。所属分类:"
                            + node.getAttributes().getNamedItem("category")
                                    .getNodeValue() + "。");
                    NodeList nodeDetail = node.getChildNodes();
                    // 获取article的下一个节点
                    for (int j = 0; j < nodeDetail.getLength(); j++) {
                        Node detail = nodeDetail.item(j);
                        if ("title".equals(detail.getNodeValue())) {
                            System.out.println("标题:" + detail.getTextContent());
                        } else if ("author".equals(detail.getNodeName())) {

                            System.out.println("作者:" + detail.getTextContent());
                        } else if ("email".equals(detail.getNodeName())) {
                            System.out.println("电子邮件:"
                                    + detail.getTextContent());
                        } else if ("date".equals(detail.getNodeName())) {
                            System.out.println("发表日期:"
                                    + detail.getTextContent());
                        }

                    }

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

代码输出结果:

  

(3)代码分析

  首先要通过以下三步创建XML文件对应的Document对象

    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

    DocumentBuilder  builder = builderFactory.newDocumentBuilder();

    Document document = builder.parse(xmlFile);

  取得Document对象之后就可以通过Document的各种方法遍历整个xml内容了。

    

           

    

 

 

 

 

 

    

posted on 2013-03-30 16:54  winfwu  阅读(411)  评论(0编辑  收藏  举报