zoukankan      html  css  js  c++  java
  • 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内容了。

        

               

        

     

        

  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/DeepBlues/p/2990671.html
Copyright © 2011-2022 走看看