使用Dom4j方式来解析XML类型文件

解析XML的方式有很多,今天我们就用Dom4j方式来解析XML文件   我们需要完成以下几个步骤

1、环境准备

(1)下载dom4j-1.6.1.jar

(2)下载junit-4.10.jar

2、温馨提示

解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来有三种方式:

(1)  自己创建Document对象

Document document = DocumentHelper.createDocument();

Element root = document.addElement("students");

其中students是根节点,可以继续添加其他节点等操作

(2)  读取XML文件获取Document对象

//创建SAXReader对象  

SAXReader reader =new SAXReader();  

//读取文件 转换成Document  

Document document = reader.read(new File("XXXX.xml"));  

(3)读取XML文本内容获取Document对象

String xmlStr = "......";  

Document document = DocumentHelper.parseText(xmlStr);  

3、示例

(1)   xml文件内容如下

<?xml version="1.0" encoding="UTF-8"?>

<Student>

<姓名>祝汉宇

<年龄>21

<学号>1508300059

<地址>江苏省苏州市昆山巴城镇

<座右铭>要么强大,要么听话  

</Student>

(2)   解析过程

package com.briup.Dom;  


import java.io.File;  

import java.util.Iterator;  

import java.util.List;  


import org.dom4j.Attribute;  

import org.dom4j.Document;  

import org.dom4j.Element;  

import org.dom4j.io.SAXReader;  

import org.junit.Test;  


public class Dom4JforXML {  

public void test() throws Exception {  

//创建SAXReader对象  

SAXReader reader =new SAXReader();  

//读取文件 转换成Document  

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));  

//获取根节点元素对象  

Element root = document.getRootElement();  

//遍历  

 listNodes(root);  

 }  

//遍历当前节点下的所有节点  

public void listNodes(Element node) {  

System.out.println("当前节点的名称:" + node.getName());  

//首先获取当前节点的所有属性节点  

 List list = node.attributes();  

//遍历属性节点  

for(Attribute attribute : list) {  

System.out.println("属性"+attribute.getName() +":" + attribute.getValue());  

}  

//如果当前节点内容不为空,则输出  

if(!(node.getTextTrim().equals(""))) {  

System.out.println( node.getName() +":" + node.getText());    

 }  

//同时迭代当前节点下面的所有子节点  

//使用递归  

Iterator iterator = node.elementIterator();  

while(iterator.hasNext()) {  

Element e = iterator.next();  

 listNodes(e);  

}  

}  

}  

(3)   解析结果

当前节点的名称:student

当前节点的名称:姓名

姓名:祝汉宇 

当前节点的名称:年龄

年龄:21

当前节点的名称:学号 

学号:1508300059

当前节点的名称:地址

地址:江苏省苏州市昆山巴城镇

当前节点的名称:座右铭  

座右铭:要么强大,要么听话

因为涉及到中文,所以在输出时要设定UTF-8编码,OutputStreamWriter进行设置编码

还有输出格式的问题,在此处使用的是OutputFormat.createPrettyPrint(),输出文档时进行了排版格式化。还有一种是OutputFormat.createCompactFormat()方法,输出内容是一行,没有进行格式化,是紧凑型的输出

已经总结完了,如有不足还望多多指点,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 8,445评论 0 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,793评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,154评论 18 399
  • /A/ 跑步是天赋还是技术 尤塞恩·博尔特(Usain Bolt,牙买加短跑运动员)于2009年在柏林创造世界纪录...
    读饭阅读 14,834评论 2 72
  • 同为条狗,我到底错了什么 文/神奇小逗 生而为狗,还是条土狗,我能怎么办!我特么也很绝望的… 衙门口总有条瘦瘪的老...
    神奇小逗阅读 4,145评论 2 2