Java - Dom4J解析XML

本文介绍了XML的两种解析方式——DOM和SAX,重点讲解了DOM4J库在XML解析中的应用。通过示例展示了如何使用DOM4J读取XML文档,获取元素和属性信息,包括根节点、子标签及其文本内容。此外,还提到了Jsoup库作为DOM解析HTML的便捷工具。
摘要由CSDN通过智能技术生成

1.XML解析的方式

        DOM: 要求解析器将整个XML文件全部加载到内存中,生成一个Document对象

            1.优点:元素和元素之间保留结构,关系,可以针对元素进行CURD操作。

             2.缺点:如果XML文件过大,可能会导致内存溢出。

        SAX:是一种速度更快,更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以事件驱动的方式来进行具体的解析,每解析已行都会触发一个事件

               1.优点:不会出现内存溢出的问题,可以处理大文件

                2.缺点:只能读,不能写

解析器就是根据不同的解析方式提供具体的实现,为了方便开发人员来解析XML,有一些方便操作的类库。

dom4j : 比较简单的XML解析的类库

Jsoup :功能强大的DOM方式解析的类库,尤其 对HTML的解析更加方便

2.使用dom4j解析XML 

<users>
    <user id="1001" country="Country">
        <id>111</id>
        <name>111</name>
        <password>111</password>
    </user>
    <user id="1002" country="Country">
        <id>1112</id>
        <name>1112</name>
        <password>1112</password>
    </user>
</users>

使用dom4j解析xml

//创建解析器对象
SAXReader saxReader = new SAXReader();

//使用解析器对象读取XML文档生成Document对象
try{

    Document document = saxReader.read(Dom4jTest.class.getClassLoader().getResource("***.xml"));

//根据Document对象获取XML的元素(标签)信息
Element rootElement = document.getRootElement();

//获取根节点的名字
rootElement.getName();

//获取根节点users标签的子标签列表
List<Element> elements = rootElement.elements();

for(Element element:elements){
    System.out.println("users标签的子标签的名字是:"+element.getName());
    System.out.println("users标签的子标签的id属性值是:"+element.attributeValue("id"));
    
    //获取子标签的所有子标签
    List<Element> elementNodeList = element.elements();
    for(Element node:elementNodeList){
        System.out.println("user标签下的子标签名字是:"+node.getName());
        System.out.printkn("user标签下的子标文本是:"+node.getText());
    }
}

//获取user标签的第一个user标签
Element firstUserElement = rootElement.element("user");
//第一个user标签的的子标签password的文本
String password = firstUserElement.elementText("password");


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

Dom4j重要的API说明

org.dom4j.Document 常用方法

Element getRootElement(); //获取根节点

String attributeValue(String name); //获取指定属性名称的属性值

String elementText(String name); //获取指定名称的子标签的文本,返回子标签文本的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

forward93124

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值