博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dom解析-----详解
阅读量:4659 次
发布时间:2019-06-09

本文共 3656 字,大约阅读时间需要 12 分钟。

(1)什么是Dom解析:

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

 

(2)简单示例

  articles.xml

View Code
XML 概述
janet
winfu@163.com
20080801
Java 基本语法
janet
winfu@163.com
20080801

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

    

           

    

 

 

 

 

 

    

转载于:https://www.cnblogs.com/DeepBlues/archive/2013/03/30/2990671.html

你可能感兴趣的文章
理解 YOLO
查看>>
检查Linux文件变更Shell脚本
查看>>
ActiveMQ中JMS的可靠性机制
查看>>
oracle操作字符串:拼接、替换、截取、查找
查看>>
”语义“的理解
查看>>
210. Course Schedule II
查看>>
月薪3000与月薪30000的文案区别
查看>>
使用spring dynamic modules的理由
查看>>
Leetcode 117 Populating Next Right Pointers in Each Node 2
查看>>
C++ Primer 第四版中文版
查看>>
变量关系
查看>>
android Service中启动Dialog
查看>>
文件下载之ServletOutputStream
查看>>
linux文件的隐藏属性:chattr
查看>>
【原版的】PHP技术成长规划过程中猿人
查看>>
NTP工作机制及时间同步的方法
查看>>
近段时间学习html和CSS的一些细碎总结
查看>>
学习Coding-iOS开源项目日志(一)
查看>>
第三章 栈和队列
查看>>
WPF 自定义NotifyPropertyChanged
查看>>