• 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内容了。

        

               

        

     

        

  • 相关阅读:
    codeforces484A
    codeforces559B
    spfa算法及判负环详解
    清北学堂提高组突破营考试T1
    lemon用法
    清北学堂提高组突破营游记day6
    清北学堂提高组突破营游记day5
    POJ-1679 The Unique MST (判断最小生成树的唯一性)
    HDU 4553 约会安排 (区间合并)【线段树】
    POJ 1236 Network Of Schools (思维+强连通)
  • 原文地址:https://www.cnblogs.com/DeepBlues/p/2990671.html
Copyright © 2020-2023  润新知