XML基础入门

不废话了,开始主题吧。

原来的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<书架> 
  <书> 
    <书名>JavaWeb开发</书名>  
    <作者>于何</作者>
    <售价>89.00元</售价>  
  </书>  
  <书> 
    <书名>Spring框架详解</书名>  
    <作者>徐良</作者>  
    <售价>55.00元</售价> 
  </书> 
</书架>


 

package cn.test.xml;

import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.testng.annotations.Test;

import cn.test.utils.xmlUtils;
//增删改查
public class XMLDemo {
	public static final String FILE_PATH="./conf/bookinfo.xml";
	@Test
	public void xmlFind() {
		//获取第二本书的售价
		//1. 加载文档,获取Document
		SAXReader reader = new SAXReader();
		Document document = null;
		try {
			document = reader.read("./conf/bookinfo.xml");
			//2. 获得根节点
			Element rootElement = document.getRootElement();
			//3.获取第二本书
			Element bookElement = (Element) rootElement.elements("书").get(1);
			//4. 获取第二本书的售价
			String price = bookElement.element("售价").getText();
			System.out.println("第二本书的售价为:"+price);
		}
		catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	@Test
	//为第一本书增加出版社信息
	public void xmlAdd() throws DocumentException, IOException {
		//1. 获得Document对象
		Document document = xmlUtils.getDocument(FILE_PATH);
		//2. 获得根节点
		Element rootElement = document.getRootElement();
		// 3.获得第一本书(由于要获得第一本,所以直接使用rootElement.element()来获取该元素)
		Element bookElement = rootElement.element("书");
		System.out.println(bookElement.element("书名").getText());
		/*
		// 4. 要添加节点,首先要创建一个节点
		Element publisherElement = DocumentHelper.createElement("出版社");
		// 5. 为该节点添加文本
		publisherElement.addText("邮电出版社");
		// 6. 将刚创建出来的节点加到书下
		bookelement.add(publisherElement);
		*/
		//可以使用一种更为简洁的方式
		bookElement.addElement("出版社")
			.addAttribute("经销商", "全国新华书店")
			.addAttribute("开本", "185X260")
			.addText("邮电出版社");
		// 7.将document写入文件
		/*OutputFormat format = OutputFormat.createPrettyPrint();
		Writer writer = new OutputStreamWriter(new FileOutputStream(FILE_PATH),"UTF-8");
		XMLWriter xWriter = new XMLWriter(writer, format);
		xWriter.write(document);
		xWriter.close();*/
		xmlUtils.document2XML(document, FILE_PATH);
	}
	@Test
	//添加属性节点
	public static void xmlAddAttribute() throws DocumentException, IOException {
		//获取Document对象
		Document document = xmlUtils.getDocument(FILE_PATH);
		//获得根节点
		Element rootElement = document.getRootElement();
		//获得第二本书
		Element bookElement = (Element) rootElement.elements().get(1);
		//为第二本书的书名添加属性值
		bookElement.element("书名").addAttribute("ISBN", "12365874588");
		//写入文件
		xmlUtils.document2XML(document, FILE_PATH);
	}
	//修改第二本书的作者
	@Test
	public static void xmlUpdate() throws DocumentException, IOException {
		//获取Document对象
		Document document = xmlUtils.getDocument(FILE_PATH);
		//获得根节点
		Element rootElement = document.getRootElement();
		//获得第二本书的作者
		Element authorElement = ((Element)rootElement.elements("书").get(1)).element("作者");
		//修改作者
		authorElement.setText("普度");
		//写入文件
		xmlUtils.document2XML(document, FILE_PATH);
	}
	@Test
	//修改第二本书的ISBN
	public static void xmlUpdateAttribute() throws DocumentException, IOException {
		//获取Document对象
		Document document = xmlUtils.getDocument(FILE_PATH);
		//获得根节点
		Element rootElement = document.getRootElement();
		//获得第二本书的书名
		Element bookNameEelement = ((Element)rootElement.elements("书").get(1)).element("书名");
		bookNameEelement.addAttribute("ISBN", "888999-123654");
		//写入文件
		xmlUtils.document2XML(document, FILE_PATH);
	}
	@Test
	//删除第二本书的ISBN
	public static void xmlRemoveAttribute() throws DocumentException, IOException {
		//获取Document对象
		Document document = xmlUtils.getDocument(FILE_PATH);
		//获得根节点
		Element rootElement = document.getRootElement();
		//获得第二本书的书名
		Element bookNameEelement = ((Element)rootElement.elements("书").get(1)).element("书名");
		//addAttribute()用法,当没有该属性时,可以为其添加,
		//当有该属性时,可以替换原来的值,当设置值为null时,可以删除该属性
		bookNameEelement.addAttribute("ISBN", null);
		//写入文件
		xmlUtils.document2XML(document, FILE_PATH);
	}
	@Test
	//删除节点
	public static void xmlRemoveNode() throws DocumentException, IOException {
		//获取Document对象
		Document document = xmlUtils.getDocument(FILE_PATH);
		//获得根节点
		Element rootElement = document.getRootElement();
		//获得第一本书的售价节点
		Element priceElement = rootElement.element("书").element("售价");
		//获得父节点并删除自己
		priceElement.getParent().remove(priceElement);
		//写入文件
		xmlUtils.document2XML(document, FILE_PATH);
	}
}


工具类

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class xmlUtils
{
	//工具类通常都将构造方法私有
	private xmlUtils() {}
	
	public static Document getDocument(String filePath) throws DocumentException {
		SAXReader reader = new SAXReader();
		return reader.read(filePath);
	}
	
	public static void document2XML(Document document, String filePath) throws IOException {
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		//Writer writer = new OutputStreamWriter(new FileOutputStream(filePath),"UTF-8");
		XMLWriter xWriter = new XMLWriter(new FileOutputStream(filePath), format);
		xWriter.write(document);
		xWriter.close();
	}
}


最后的运行结果

xmlFind()的运行结果:

第二本书的售价为:55.00

PASSED: xmlFind

------------------------------------

xmlAdd()的运行结果

 

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

<书架>

  <>

    <书名>JavaWeb开发</书名> 

    <作者>于何</作者> 

    <售价>89.00</售价> 

    <出版社 经销商="全国新华书店" 开本="185X260">邮电出版社</出版社>

  </> 

  <>

    <书名>Spring框架详解</书名> 

    <作者>徐良</作者> 

    <售价>55.00</售价>

  </>

</书架>

------------------------------------

xmlAddAttribute ()的运行结果:

添加了属性节点

  <>

    <书名 ISBN="12365874588">Spring框架详解</书名> 

    <作者>徐良</作者> 

    <售价>55.00</售价>

  </>

------------------------------------

xmlUpdate ()的运行结果:

将作者修改为普度

  <>

    <书名 ISBN="12365874588">Spring框架详解</书名> 

    <作者>普度</作者> 

    <售价>55.00</售价>

  </>

 

 

------------------------------------

xmlUpdateAttribute ()的运行结果:

修改属性节点

  <>

    <书名 ISBN="888999-123654">Spring框架详解</书名> 

    <作者>普度</作者> 

    <售价>55.00</售价>

  </>

------------------------------------

xmlRemoveAttribute ()的运行结果:

删除属性节点

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

<书架>

  <>

    <书名>JavaWeb开发</书名> 

    <作者>于何</作者> 

    <售价>89.00</售价> 

    <出版社 经销商="全国新华书店" 开本="185X260">邮电出版社</出版社>

  </> 

  <>

    <书名>Spring框架详解</书名> 

    <作者>普度</作者> 

    <售价>55.00</售价>

  </>

</书架>

------------------------------------

xmlRemoveNode ()的运行结果:

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

<书架>

  <>

    <书名>JavaWeb开发</书名> 

    <作者>于何</作者> 

    <出版社 经销商="全国新华书店" 开本="185X260">邮电出版社</出版社>

  </> 

  <>

    <书名>Spring框架详解</书名> 

    <作者>普度</作者> 

    <售价>55.00</售价>

  </>

</书架>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值