Xml解析常用的两种方式

Xml解析常用的两种方式

Xml解析常用的两种方式dom、 DOM4J
下面我们先看一下这两种方式的优缺点:
1、DOM解析的特点是将整个xml文档以树形结构放入到内存中,是官方推荐标准,优点是在内存中可以增删改查,缺点是当文件过大是可能会内存溢出。
(详细说明如下)
DOM的优势主要表现在:
易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。
DOM的缺点主要表现在:
效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,
因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instruction和comment都创建一个对象,
这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。

DOM4J解析:
简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP。
优点:
1、大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。
2、支持XPath。
3、有很好的性能。

缺点:
1、大量使用了接口,API较为复杂。

1.准备xml文件

下面内容如果是练习的话直接复制即可
当然如果想自己写也很ok

<?xml version="1.0" encoding="UTF-8"?>
<games>
       <game id="1">
           <name>厚黑学</name>
           <company>计算机世界</company>
       </game>
       <game id="2">
           <name>黑客帝国</name>
           <company>Student</company>
       </game>
       <game id="3">
           <name>javaWeb</name>
           <company>秋天的美丽</company>
       </game>
</games>

2.DOM解析

废话不多说直接上代码


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;


public class ParseXml {

    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
        // 获取去dom解析器工厂
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        // 获取dom解析的构建器
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

        // 通过构建器对象调用parse()方法 ----》方法中传入需要解析文件的路径
        Document parse = documentBuilder.parse("F:\\java\\javaweb\\parse_xml_project01\\src\\com\\bjpowernode\\parsexml\\games.xml");

        // 获取根节点
        Element documentElement = parse.getDocumentElement();

        // 获取根节点的子节点(game)
        NodeList games = documentElement.getElementsByTagName("game");

        // 根据节点的索引找到需要的节点元素
        Element game = (Element) games.item(2);

        // 获取company节点
        NodeList company = game.getElementsByTagName("company");
        Element item = (Element) company.item(0);

        // 输出"company"节点的文本内容
        String textContent = item.getTextContent();

        // 输出到控制台
        System.out.println(textContent);


    }
}

3. DOM4J解析

在使用 DOM4J解析之前需要先导入DOM4J的jar包
这是下载地址:https://dom4j.github.io/
需要的小伙伴自行下载即可
在这里插入图片描述
DOM4J解析代码如下

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

import java.io.File;
import java.util.Iterator;

public class Dom4jXml {
    public static void main(String[] args) {
        // 构建解析对象
        SAXReader saxReader = new SAXReader();
        try {
            // 创建管道指向需要解析的xml文件
            Document read = saxReader.read(new File("F:\\java\\javaweb\\parse_xml_project01\\src\\com\\bjpowernode\\parsexml\\games.xml"));

            // 获取根节点标签
            Element rootElement = read.getRootElement();

            // 读取games
            Iterator iterator = rootElement.elementIterator();

            // 遍历
            while (iterator.hasNext()){
                // 获取到所有的子节点并转换
                Element next = (Element) iterator.next();

                // 迭代game
                Iterator iterator1 = next.elementIterator();

                while (iterator1.hasNext()){

                    Element next1 = (Element) iterator1.next();

                    // 通过getText()方法获取节点的文本内容
                    String text = next1.getText();

                    // 打印节点里面所有的文本内容(next1.getName() -- 》这个方法是获取节点名字的)
                    System.out.println(next1.getName() +"---->"+text);
                }


            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值