简单实现DOM4J解析查询XML

本文详细介绍使用DOM4J库解析、修改和操作XML文件的方法。通过实例演示了如何导入DOM4J和Jaxen包,利用SAXReader读取XML文档,结合XPath选取和修改节点,以及增删节点并优雅地输出到文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单实现DOM4J解析XML文档

Dom4j获取document对象采用的是dom4j的包,因此,在实现之前需要进行导入第三方jar包。
需要导入的包分别有两个,一个是DOM4J的核心jar包,还有一个是在压缩包下的lib文件夹下的 jaxen包
资源文件分析
进入DOM4J文档目录,点击index.html进入DOM4J目录,找到快速启动项,就能快速进行定位查询 index文档

XPATH

	XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

xpath的几个常用语法:
作用:将XML中的标签的层级关系,使用路径的形式表现出来
语法:
/ 如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径
// 如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
* 星号 * 表示选择所有由星号之前的路径所定位的元素
[] 方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.
@属性名 匹配相同属性名的所有标签

下面进行详细的导包演示:

  • 在Java工程中创建一个lib文件夹
    在java工程中创建一个lib文件夹
  • 选中要导入的jar包,复制
    要导入的jar包要导入的jar包
  • 复制粘贴到lib文件夹下面
    导入的jar包
  • 导包之后需要把他进行关联,只有进行关联后才能算是导入成功!那么如何关联呢?具体的关联步骤如图
    关联
  • 右键导入的文件,把把鼠标放到build path上,有一个 Add to Build Path 选项,单机,添加。成功后效果如下图,出现奶瓶形状之后才算导入成功
    效果图
    导包成功后,就可以进入正戏啦!
    —在进行解析之前,我们来分析一下步骤
    —实现步骤:
  • 1.获取到document对象
  • 2.写出xpath的路径
  • 3.拿到指定的标签
  • 4.查询指定的文本内容(这里就以查询为例-_-)
    需要使用到的类和API
    SAXReader类:
    Document read(File类型);
    获取一个Document对象
    document.selectSingleNode(xpath);
    直接获取指定的单个节点,需要配合xpath使用
    selectNodes(xpath);
    获取多个节点
    —具体实现代码如下:
public void testQuery() {
		/*
		 * 实现步骤:
		 * 1.获取到document对象
		 * 2.写出xpath路径
		 * 3.拿到指定的标签---selectSingleNode
		 * 4.查询指定的文本内容
		 * */
		//路径:这里需要创建一个File类来指定你的xml文件的路径
		File f = new File("D:/eclipse/JavaEEWorkSpace/XML/contacts.xml");
		//获取Document对象
		SAXReader sr = new SAXReader();
		Document document = sr.read(f);
		//配合xpath拿到指定的element对象
		String xpath = "//linkman[@id='2']/name";
		Node name = document.selectSingleNode(xpath);		
		//打印输出查询的结果
		System.out.println(name.getText());
	}

–当然,配合xpath还可以对XML文件进行修改和删除,增加的话要麻烦一点
–下面附上增删改的代码:
当然,这是我做的例子,可以拿去修改下,直接用!嘻嘻,不过,用之前,得看一下你的XML文档啦!
增删改需要关联实体文件,不然操作不成功,嘻嘻。

—增加
Element接口:
Element addElement(标签名)
添加一个标签
XMLWriter类:格式友好的输出形式
XMLWriter(Writer writer,OutputFormat format)
构造一个具有良好输出格式的XML输出对象
void write(Node node)
将一个document输出到实体文件中
void close()
关闭输出
OutputFormat类:输出格式类
OutputFormat createPrettyPrint()
构造一个良好的格式对象

	public void testAdd() throws Exception {
		/*
		 * 需求:添加一个linkman标签及其子标签,仿照前两个linkman样式
		 * */
		//路径
		File f = new File("D:/eclipse/JavaEEWorkSpace/day04_XML/contacts.xml");
		//获取Document对象
		SAXReader sr = new SAXReader();
		Document document = sr.read(f);
		//拿到根标签
		Element root = document.getRootElement();
		//添加子标签,并设置属性
		Element addele = root.addElement("linkman").addAttribute("id", "3");
		//添加子标签--并设置文本
		addele.addElement("name").setText("gm");
		addele.addElement("email").setText("gmclub@gm.com");
		addele.addElement("address").addText("哒哒哒哒");
		addele.addElement("group").setText("吧嗒吧嗒");
		//将数据关联到实体文件中
		/*FileWriter fw = new FileWriter(f);
		document.write(fw);
		fw.close();*/
		//友好格式输出,XMLWriter 类中的这个类型OutputFormat.createPrettyPrint()方法可以友好的输出哦,就是按格式排版,嘻嘻。
		XMLWriter wri = new XMLWriter(new FileWriter(f),OutputFormat.createPrettyPrint());
		wri.write(document);
		wri.close();

—修改
Document接口:
void write(Write类型)
将内存数据关联给一个字符输出流
Element接口:
void setText(设置值)
设定标签中的文本数据

	public void testAlter() throws Exception {
		/*
		 * 需求:修改第id=3的linkman的group为叭嗒叭哒
		 * 实现步骤:
		 * 1.获取对象
		 * 2.设置值
		 * 3.保存到文件
		 * */
		//路径
		File f = new File("D:/eclipse/JavaEEWorkSpace/day04_XML/contacts.xml");
		//获取Document对象
		SAXReader sr = new SAXReader();
		Document document = sr.read(f);
		//获取到element对象
		String xpath = "//linkman[@id='3']/group";
		document.selectSingleNode(xpath).setText("叭嗒叭哒");
		//将数据输出到实体文件
		//友好格式输出
		XMLWriter wri = new XMLWriter(new FileWriter(f),OutputFormat.createPrettyPrint());
		wri.write(document);
		wri.close();
	}

—删除
Element接口:
Element getParent()
获取父标签
Boolean remove(Element对象)
删除指定标签

	public void testRemove() throws Exception {
		/*
		 * 需求:删除id为4的linkman
		 * 实现步骤:
		 * 1.获取document对象
		 * 2.删除指定的element对象
		 * 3.保存数据到实体文件
		 * */
		//路径
		File f = new File("D:/eclipse/JavaEEWorkSpace/day04_XML/contacts.xml");
		//获取Document对象
		SAXReader sr = new SAXReader();
		Document document = sr.read(f);
		//删除指定标签
		String xpath = "//linkman[@id='4']";
		Node linkman = document.selectSingleNode(xpath);
		linkman.getParent().remove(linkman);
		//将数据输出到实体文件
		//友好格式输出
		XMLWriter wri = new XMLWriter(new FileWriter(f),OutputFormat.createPrettyPrint());
		wri.write(document);
		wri.close();
	}

—好了,分享就到这里,希望对你有帮助哦,嘻嘻。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值