dom解析,解析xml文件

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

解析xml文件也是一个很重要的知识
接下来就是掩饰解析xml文件喽!

分类

解析xml文件分为两种(人家说):dom解析和sax解析。
两种解析都有各自的优缺点 ,简单概括以下就是,dom解析适合小文件的,数据量不多的xml,而另一个就恰恰相反。

XML的解析方式
1.DOM(Document Object Model 文档对象模型)
关键字:树(Document)
优点: 把xml文件在内存中构造树形结构,可以遍历和修改节点
缺点: 如果文件比较大,内存有压力,解析的时间会比较长
2. SAX(Simple API for Xml 基于XML的简单API)
关键字:流(Stream)
把xml文件作为输入流,触发标记开始,内容开始,标记结束等动作
优点: 解析可以立即开始,速度快,没有内存压力

案例演示

这里就用idea结合maven项目演示了!
这里的文件也就是spring.xml文件。
在演示spring.xml文件之前,需要在另一个xml文件演示,已达到循序渐进的学习。

案例演示

首先是xml文件:(decp.xml)

<?xml version="1.0" encoding="UTF-8"?>
<list>
    <dept id="1">
        <name>综合部</name>
        <createtime>2020-01-01</createtime>
        <age>400</age>
        <minister>孙悟空</minister>
    </dept>
    <dept id="2">
        <name>人事部</name>
        <createtime>2020-01-02</createtime>
        <age>300</age>
        <minister>朱悟能</minister>
    </dept>
    <dept id="3">
        <name>研发部</name>
        <createtime>2020-01-03</createtime>
        <age>200</age>
        <minister>白龙马</minister>
    </dept>
    <dept id="4">
        <name>销售部</name>
        <createtime>2020-01-04</createtime>
        <age>300</age>
        <minister>沙悟净</minister>
    </dept>
    <dept id="5">
        <name>售后部</name>
        <createtime>2020-01-05</createtime>
        <age>1000</age>
        <minister>唐三藏</minister>
    </dept>
</list>

然后就是我们的测试了!!!
首先 的dom 解析:

 DocumentBuilderFactory documentBuilderFactory= DocumentBuilderFactory.newInstance();
        //创建一个Doucumentbuild对象
        DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
        //解析对应的xml文件(注意这里文件路径会有bug(注意))
        Document doc=documentBuilder.parse("src/main/resources/decp.xml");
        //根据标签名获取Node节点nodelist
        NodeList nodelist=doc.getElementsByTagName("dept");
        /*输出该节点 的长度*/
        System.out.println(nodelist.getLength());
        for(int i=0;i<nodelist.getLength();i++){
            //输出此节点的节点名和内容
           // System.out.println(nodelist.item(i).getNodeName()+"--		   >"+nodelist.item(i).getTextContent());

        //获取Node节点中的属性
        NamedNodeMap attrs= nodelist.item(i).getAttributes();
        //遍历获取属性
        for(int j=0;j<attrs.getLength();j++) {
            //返回节点
            Node x=attrs.item(j);
            System.out.println(x.getNodeName()+" "+x.getNodeValue());
        }
        }
		//获取节点的另一种方法
        /*
        * 使用Element对象获取节点
        * */
        for(int i=0;i<nodelist.getLength();i++){
            Element node =(Element) nodelist.item(i);
            System.out.println(node.getAttribute("id"));
        }

方法

你会发现这里很多都没有见过的对象,方法更是无从下手:
使用dom解析时会有包的问题:

import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

这里使用的主要是org.w3c.dom.*;
首先是node方法:
getNodeName():此节点的名称,取决于其类型
getNodeValue():此节点的值,取决于其类型
getTextContent() :此属性返回此节点及其后代的文本内容。
getAttributes():包含此节点的属性的 NamedNodeMap(如果它是 Element);否则为 null。
具体方法还是截图看的好一点:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后是NamedNodeMap
在这里插入图片描述
到这里第一种方式就完了!!!
使用SAX解析
首先使用的maven项目;导入jar包:

 <!--用户解析xml文件的依赖-->
        <!-- dom4j -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

直接上代码:

   /*
         * 使用DOM4J解析XML的大致步骤
         * 1:创建SAXReader
         * 2:使用SAXReader读取指定的xml文档并生成Document对象
         * 3:通过Document对象获取根元素
         * 4:从根元素开始逐级获取子元素已达到遍历XML文档数据的目的
         */
        try {
        SAXReader reader=new SAXReader();
        Document read = reader.read(new File("E://IDEAMaven/springLX/spring/src/main/resources/decp.xml"));
        Element rootElement = read.getRootElement();
            List<Element> dept = rootElement.elements("dept");
            System.out.println(dept.size());
            for(Element element:dept){
                Element name = element.element("name");
                System.out.println(name.getName());
               // System.out.println(name.attributeValue("id"));
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }


这里用到的是Element;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

方法

  /*
             * Document提供了获取根元素的方法:Element getRootElement()
             * 
             * Element每个实例用于表示XML文档中的一个元素(一对标签)
             * 常用方法:
             * String getName()获取当前标签的名字
             * String getText()获取当前标签中间的文本信息
             * Element element(String name)获取当前标签中指定名字的子标签
             * List elements()获取当前标签中所有子标签,返回的List集合中会包含若干的Element实例,每个实例是其中一个子标签
             * List elements(String name)获取当前标签中所有同名子标签(指定的名字)
             * attributeValue("id"));获取id属性值
             */

第二中方式结束;看起来简单了很多;
然后就是我们的解析spring.xml文件了,相信你如果按照代码敲一遍,就会了!
但是不排除!!
所以就直接上代码:

  /*
         * 使用DOM4J解析XML的大致步骤
         * 1:创建SAXReader
         * 2:使用SAXReader读取指定的xml文档并生成Document对象
         * 3:通过Document对象获取根元素
         * 4:从根元素开始逐级获取子元素已达到遍历XML文档数据的目的
         */
        try {
        SAXReader reader=new SAXReader();
        Document read = reader.read(new File("E://IDEAMaven/springLX/spring/src/main/resources/spring.xml"));
        Element rootElement = read.getRootElement();
            List<Element> dept = rootElement.elements("bean");
            System.out.println(dept.size());
            for(Element element:dept){
               // Element name = element.element("name");
                System.out.println(element.getName());
                System.out.println(element.attributeValue("id"));
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }

自己找一下就可以发现小细节了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值