XML(七)-DOM解析

DOM解析

JAXP(Java API for XML Parsing) :用于XML解析的Java API。

本文通过一个实际的代码例子来说明如何用Java提供的DOM相关的类和接口解析XML:

首先,是XML文档:persons.xml

<?xml version="1.0"  encoding="UTF-8" standalone="yes"?>
<!DOCTYPE persons [
<!ENTITY xx "我不是一个随便的人,我随便起来不是人">
]>
<persons>
    <![CDATA[
        从今天起,恶心才刚刚开始,
        但是这很重要,我不会把不重要的东西教给大家!
    ]]>
    <!-- 这是xml文档的注释 -->
    <person id = "p01">
        <name>张三</name>
        <age>15</age>
        <address>南京市</address>
        <info>&xx;</info>
    </person>
    <person id = "p02">
        <name>李小龙</name>
        <age>20</age>
        <address>美国</address>
    </person>
    <person id = "p03">
        <name>张小凡</name>
        <age>21</age>
        <address>香港</address>
    </person>
</persons>

新建Java类,解析如下:

package cn.org.kingdom.dom;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomParseTest {
    public static void main(String[] args)throws Exception {
        //step1:获得document解析器工厂
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //step2:获得document解析器
        DocumentBuilder db = dbf.newDocumentBuilder();
        //step3:通过document解析器得到文档对象
        Document doc = db.parse(new File("src/persons.xml"));
        //step4:获得所有的person节点
        NodeList list = doc.getElementsByTagName("person");
        //step5:循环遍历
        for(int i = 0 ;i<list.getLength();i++) {
            Node node = list.item(i);
            Element e = (Element) node;
            //注意元素<name></name>之间是文本节点也点新获取
            String name = e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
            String age = e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue();
            String address = e.getElementsByTagName("address").item(0).getFirstChild().getNodeValue();
            System.out.println(name+"-->"+age+"-->"+address);
        }
    }
}

首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

我们在这里使用DocumentBuilderFactory的目的是为了创建与具体解析器无关的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。又因为所有的解析器都服从于JAXP所定义的接口,所以无论具体使用哪一个解析器,代码都是一样的。所以当在不同的解析器之间进行切换时,值需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。

DocumentBuilder db = dbf.newDocumentBuilder();

当获得一个工厂对象之后,使用它的静态方法newDocumentBuilder(),可以获得一个DocumentBuilder对象这个对象代表了具体的DOM解析器。

解析器的具体实现对于程序来说并不重要,然后,我们就可以利用这个解析器对文档进行解析了。Sun公司提供了默认的工厂和默认的解析器,上面的例子中就使用了默认的解析器。

最后附上我的微信号:15189838151,仅仅作为技术交流与分享!

或者扫描二维码(长按图片,然后点击识别图中二维码)也可以

 

时间: 2024-10-04 21:01:20

XML(七)-DOM解析的相关文章

利用jaxp对xml进行dom解析

1 <?xml version="1.0" encoding="UTF-8"?> 2 <书架> 3 <书> 4 <书名>何茂赟自传</书名> 5 <作者>何茂赟</作者> 6 <售价>100.00元</售价> 7 </书> 8 <书> 9 <书名>何茂赟自传2</书名> 10 <作者>何茂赟</

XML之DOM解析文档

TestDom.java package com.sxt.dom; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Do

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

使用jaxp对比xml进行DOM解析

/*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigu

jaxp解析XML之DOM解析

XML解析技术XML解析方式分为三种一种是DOM解析一种是SAX解析 DOM思想:将整个xml加载入内存,形成围挡对象,所有对xml操作都是对内存中节点对象进行,DOM是官方xml解析标准,同时支持解析其他各种语言 SAX解析方式的出现,因为DOM的解析方式需要对文档进行加载入内存,当文档较大的时候比较消耗资源,这时候就出现了SAX解析SAX思想:一边解析,一边处理,一边释放资源 在JDK6中又引入了另一种StAX解析方式是一种拉模式的xml解析方式,而SAX是一种推模式XML解析方式推模式由服

用java操作XML文件(DOM解析方式)

XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DOM解析方式 在java工程中导入dom4j.jar包. (一)用java读XML文件 <1>创建SAXReader对象. RAXReader reader=new RAXReader(); <2>调用RAXReader的Document read(File file)方法,获取xml文

XML之DOM解析模型

<?xml version= "1.0" encoding = "UTF-8"> <articles> <article category="xml"> <title>XML概述</title> <author>Jerry</author> <email>[email protected]</email> <date>2014-

mybatis 解析配置文件(一)之XML的DOM解析方式

简介 在之前的文章<mybatis 初步使用(IDEA的Maven项目, 超详细)>中, 讲解了mybatis的初步使用, 并总结了以下mybatis的执行流程: 通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader: SqlSessionFactoryBuilder使用上一步获得的reader创建SqlSessionFactory对象; 通过 sqlSessionFactory 对象获得SqlSession; SqlSession对象通过selec

java解析XML① 之DOM解析和SAX解析(包含CDATA的问题)

Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电影院看电影一样,从头到尾看一遍,不能回退(Dom可来来回回读取),在看电影的过程中,每遇到一个情节,都会调用大脑去接收处理这些信息.SAX也是相同的原理,每遇到一个元素节点,都会调用相应的方法来处理.在SAX的解析过程中,读取到文档开头.文档结尾,元素的开头和元素结尾都会调用相应方法,我们可以在这些