解析XML—— Dom4j的SAX解析

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

<书架> 
  <书> 
    <书名>葵花宝典</书名>  
    <作者>岳不群</作者>  
    <售价>998两</售价>  
    <简介>欲练此功...</简介> 
  </书>  
  <书> 
    <书名>降龙十八掌</书名>  
    <猫>我是猫</猫>  
    <作者 age="101">欧阳峰</作者>  
    <售价>9两</售价>  
    <简介>这书不错啊</简介>  
    <猫>我是猫</猫> 
  </书> 
</书架>

 

package com.ygang.topic02;

import java.io.IOException;
import java.util.List;

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

import com.ygang.utils.Dom4jParseUtil;

public class Dom4j_DomParse {

	public static void main(String[] args) {
		// 1、读
		read();

		// 2、写(插入)
		add();

		// 3、删
		delete();

		// 4、改
		update();

	}

	/**
	 * 改:
	 * 将第二本书作者改为 欧阳峰 ,添加属性 age="101"
	 */
	private static void update() {
		String xmlPath = "src/book2.xml";
		Document document;
		try {
			document = new SAXReader().read(xmlPath);
			Element root = document.getRootElement();
			Element secondBook = (Element) root.elements("书").get(1);
			Element author = secondBook.element("作者");
			author.addAttribute("age","101").setText("欧阳峰");

			// 回写
			Dom4jParseUtil.write(document, xmlPath);
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void delete() {
		String xmlPath = "src/book2.xml";
		Document document;
		try {
			document = new SAXReader().read(xmlPath);
			Element root = document.getRootElement();
			Element firstBook = (Element) root.elements("书").get(0);
			firstBook.remove(firstBook.element("狗"));

			// 回写
			Dom4jParseUtil.write(document, xmlPath);
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 添加(插入): 在第一本书“简介”前加入<狗>有粮有米的Tom</狗>
	 */
	private static void add() {
		String xmlPath = "src/book2.xml";
		Document document;
		try {
			document = new SAXReader().read(xmlPath);
			Element root = document.getRootElement();
			Element firstBook = (Element) root.elements("书").get(0);

			Element dog = DocumentHelper.createElement("狗");
			dog.addText("有粮有米的Tom");

			List list = firstBook.elements();
			list.add(3, dog);

			// 回写
			Dom4jParseUtil.write(document, xmlPath);
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * DOM4J的SAX解析,读取文件,获取两本书的售价
	 * 
	 * @throws DocumentException
	 */
	public static void read() {
		String xmlPath = "src/book2.xml";
		Document document;
		try {
			document = new SAXReader().read(xmlPath);
			Element root = document.getRootElement();
			List<Element> books = root.elements("书");
			for (Element book : books) {
				Element price = book.element("售价");
				System.out.println(price.getText());
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public abstract class Dom4jParseUtil {
	private Dom4jParseUtil(){}
	
	// 漂亮格式回写
	public static void write(Document document,String xmlPath) throws IOException {
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter writer = new XMLWriter(new FileWriter(xmlPath), format);
		writer.write(document);
		writer.close();
	}
}

 

 

转载于:https://my.oschina.net/cuncaojin/blog/407210

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值