dom4j 解析 XML 示例

1 篇文章 0 订阅

dom4j解析XML是我们开发中常用解析方式,所以话不多说直接上代码:

以下是相应的Java代码


/**
 * dom4j 的CRUD
 * @author Administrator
 *
 */
public class Demo2 {
	@Test
	// 获取所有的书名文本信息
	public void find() throws DocumentException{
		// 获取XML解析器
		SAXReader reader = new SAXReader();
		// 获取XML文档
		Document document = reader.read("book.xml");
		// 获取XML根节点
		Element root = document.getRootElement();
		// 根节点下所有子节点 <书>
		List<Element> elements = root.elements();
//		for(int i=0; i<elements.size(); i++){
//			String bookNameText = elements.get(i).element("书名").getText();
//			System.out.println(bookNameText);
//		}
		// 遍历所有相应的子节点
		for(Element ele : elements){
			Element bookName = ele.element("书名");
			String bookNameText = bookName.getText();
			System.out.println(bookNameText);
		}
		
	}
	
	@Test
	// 向第二个<书>节点添加子节点 <特价>20.00元</特价>
	public void add() throws Exception{
		// 获取XML解析器
		SAXReader reader = new SAXReader();
		// 获取XML文档
		Document document = reader.read("book.xml");
		// 获取XML根节点
		Element root = document.getRootElement();
		
		// 创建节点信息
		Element createElement = DocumentHelper.createElement("特价");
		createElement.addText("20.00元");
		
		// 将节点信息添加到XML文档中
		List<Element> elements = root.elements();
		elements.get(1).add(createElement);
		
		// 输出到 book.xml 中
		OutputStream out = new FileOutputStream("book.xml");
		XMLWriter writer = new XMLWriter(out);
		writer.write(document);
		writer.close();
	}
	
	@Test
	// 将 <特价> 改为16.8元
	public void update() throws DocumentException, Exception{
		// 获取XML解析器
		SAXReader reader = new SAXReader();
		// 获取XML文档
		Document document = reader.read("book.xml");
		// 获取XML根节点
		Element root = document.getRootElement();
		// 获取要修改的节点
		List<Element> elements = root.elements();
		Element priceEle = elements.get(1).element("特价");
		
		// 重新设置信息
		priceEle.setText("16.8元");
		
		// 写到XML中
		OutputStream out = new FileOutputStream("book.xml");
		XMLWriter writer = new XMLWriter(out);
		writer.write(document);
		writer.close();
	}
	
	@Test
	// 删除指定元素
	public void delete() throws Exception{
		// 获取XML解析器
		SAXReader reader = new SAXReader();
		// 获取XML文档
		Document document = reader.read("book.xml");
		// 获取XML根节点
		Element root = document.getRootElement();
		
		// 获取根节点下所有节点
		List<Element> elements = root.elements();
		
		Element element = elements.get(2).element("特价");
		element.getParent().remove(element);
//		System.out.println(element.getName()+ "==="+ element.getText());
		
		// 写到XML中
		OutputStream out = new FileOutputStream("book.xml");
		XMLWriter writer = new XMLWriter(out);
		writer.write(document);
		out.close();
	}
	
	@Test
	// 在指定位置添加 元素
	public void addEle() throws Exception{
		// 获取XML解析器
		SAXReader reader = new SAXReader();
		// 获取XML文档
		Document document = reader.read("book.xml");
		// 获取根节点
		Element root = document.getRootElement();
//		System.out.println(root.getName());
		
		// 获取根节点下所有的元素
		List<Element> elements = root.elements();
		// 获取根节点下的第三个子节点
		Element element = elements.get(2);
		// 子节点下所有的节点
		List<Element> elements2 = element.elements();
		
		// 创建节点信息
		Element createElement = DocumentHelper.createElement("作者是否在世");
		createElement.setText("已经离世");
		
		// 挂载节点,后面节点会依次后移
		elements2.add(1, createElement);
		
		// 写到XML中
		OutputStream out = new FileOutputStream("book.xml");
		XMLWriter writer = new XMLWriter(out);
		writer.write(document);
		out.close();
		
	}
	
	@Test
	// 对属性进行操作
	public void attr() throws Exception{
		// 获取XML解析器
		SAXReader reader = new SAXReader();
		// 获取XML文档
		Document document = reader.read("book.xml");
		// 获取根节点
		Element root = document.getRootElement();
		
		// 获取所有子节点
		List<Element> elements = root.elements();
		// 获取第三个子节点
		Element element = elements.get(2);
		// 第三个子节点下所有的子节点
		List<Element> elements2 = element.elements();
		
		Element book3Ele = elements2.get(0);
		// 添加属性信息
//		Attribute createAttribute = DocumentHelper.createAttribute(book3Ele, "评价", "值得一看");
//		book3Ele.add(createAttribute);
		
		// 修改属性信息
//		book3Ele.attribute("评价").setText("不能错过哦");
		
		// 查找属性信息
//		Attribute book3Attr = book3Ele.attribute("评价");
//		String attrName = book3Attr.getName();
//		String attrText = book3Attr.getText();
//		System.out.println(attrName+ "====" +attrText);
		
		// 删除属性信息
		book3Ele.remove(book3Ele.attribute("评价"));
		
		// 写到XML中
		OutputStream out = new FileOutputStream("book.xml");
		XMLWriter writer = new XMLWriter(out);
		writer.write(document);
		out.close();
	}
}
对应的XML为:

<?xml version="1.0" encoding="UTF-8"?>
<书架>
	<书>
		<书名>海底两万里</书名>
		<作者>儒勒·凡尔纳</作者>
		<售价>39.80元</售价>
	</书>
	<书>
		<书名>80天环游地球</书名>
		<作者>儒勒·凡尔纳</作者>
		<售价>28.00元</售价>
		<特价>16.8元</特价>
	</书>
	<书>
		<书名>福尔摩斯探案全集</书名>
		<作者>阿瑟·柯南道尔</作者>
		<售价>98.80元</售价>
	</书>
</书架>
当然如果要使用dom4j 解析XML那么,请务必导入相应的jar包。   dom4j-1.6.1.jar


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值