XML(二)

一、 使用DOM操作XML(修改和删除)

1、根据标签名获取元素节点列表: NodeList getElementsByTaName(String tagName)
2、获取节点列表长度: int getLength();
3、根据索引获取节点列表中的元素: Node item(String name)
4、设置元素节点的属性:void setAttrbute(String name,String value);
5、获取和设置元素节点内容:String getTextContent();
void setTextContent(String textContent);
6、获取元素节点的元素名称:String getTagName();
7、获取节点的所有子节点列表: NodeList getChildNodes();
8、获取节点的父节点:Node getParentNode();
9、删除某个子节点:void removerChild(Node hildNode)

二、使用DOM4J操作XML(CRUD)

1.6.1版本
1、获取根元素:Element getRootElment();
2、获取指定名称的子元素 :List elements(String tagName);
3、获取所有的子元素节点: List elements();
4、获取指定的子元素节点(单个): Element elementTest(String tagName);
5、获取指定子元素的的内容:String elementText(String tagName);
6、获取指定元素的内容(去除空格):String elementTextTrim(String tagName);
7、给元素节点添加属性:void addAttribute(String name,String value);
8、给元素节点添加内容:void addTest(String text); 如果内容有使用 void setText(String text);
9、根据名称创建并添加元素节点: Element addElement(String tagName);
10、删除子元素节点:void remove(Element element);

详细见代码:

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

<books> 
  <!-- 注释 -->  
  <book id="01"> 
    <name>了不起的盖茨比</name>  
    <author>弗·司各特·菲茨杰拉德</author> 
  </book>  
  <book id="02"> 
    <name>三体</name>  
    <author>刘慈欣</author> 
  </book>  
  <book id="03"> 
    <name>人性的弱点</name>  
    <author>戴尔·卡耐基</author> 
  </book>  
  <book id="04"> 
    <name>红楼梦</name>  
    <author>曹雪芹</author> 
  </book>  
</books>
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;



/**
 * 使用Doma4j解析存储XML文件
 * @author Douer
 *
 */
public class Doma4j {
	//用于收藏 .xml 信息 对应的Document对象  (注意不要导错包org.dom4j.Document)
	private Document document;
	
	//获得Document对象 方法
	public void getDom(String site) {
		//创建解析器
		SAXReader saxreader = new SAXReader();
		try {
			document = saxreader.read(new File(site));
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	//获取XML信息 方法
	public void showInof() {
		//获取XML根节点  (注意不要导错包org.dom4j.Document)
		Element element = document.getRootElement();
		//获取所有根的元素节点  存到迭代器中
		Iterator iterator = element.elementIterator();
		//遍历
		while(iterator.hasNext()) {
			//类型转换
			Element all =  (Element) iterator.next();
			// 查找id 元素 并输出
			System.out.println("ID: "+all.attributeValue("id"));
			//获取所有book子元素节点  存到迭代器中 
			Iterator iterator1 = all.elementIterator();
			//遍历
			while(iterator1.hasNext()) {
				//类型转换
				Element all1 =  (Element) iterator1.next();
				//org.dom4j.Document包  获取属性节点名称  和  属性节点内容 并输出
				System.out.println(all1.getName()+":"+all1.getText());
			}
			System.out.println("——————————————————");
		}
	}
	
	//添加XML信息 方法
	public void addInfo() {
		//获得XML的根元素
		Element element = document.getRootElement();
		//创建 book 元素
		Element addBook = element.addElement("book");
		//给 book 元素节点添加属性id属性
		addBook.addAttribute("id", "5");
		//创建 name 属性节点  向 name 中添加内容
		Element addName = addBook.addElement("name");
		addName.setText("全球通史");
		Element addAuthor = addBook.addElement("author");
		addAuthor.setText("L.S.斯塔夫里阿诺斯");
	}
	
	//将存到内存的XML 信息持久化到本地为文件中
	public void save(String site) throws UnsupportedEncodingException, FileNotFoundException {
		//创建转换器 对象
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter writer = null;
		//设置好编码格式
//		format.setEncoding("UTF-8");
		try {
			//设置输出地址 编码格式 和 设置转换格式  
			writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(site),"UTF-8"),format);
			writer.write(document);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//关流
			try {
				if(writer != null) {
					writer.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	//修改XML 信息 方法
	public void amend() {
		//获得XML的根元素
		Element element = document.getRootElement();
		//获取所有根的元素节点  存到迭代器中
		Iterator iterator = element.elementIterator();
		//遍历
		while(iterator.hasNext()) {
			//类型转换
			Element all =  (Element) iterator.next();
			if(all.attributeValue("id").equals("01")) {
				all.element("name").setText("盗墓笔记");
				all.element("author").setText("南派三叔");
			}	
		}
		try {
			save("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
		} catch (UnsupportedEncodingException | FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//删除XML 信息 方法
	private void delete() {
		//获得XML的根元素
		Element element = document.getRootElement();
		//所有根的元素节点  存到迭代器中
		Iterator iterator = element.elementIterator();
		//遍历
		while(iterator.hasNext()) {
			//类型转换
			Element all =  (Element) iterator.next();;
			if(all.attributeValue("id").equals("02")) {
				//自己不能删除自己 所以需要用它的根节点
				element.remove(all);
			}
		}
		try {
			save("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
		} catch (UnsupportedEncodingException | FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {	
		Doma4j doma4j = new Doma4j();
		//获取DOM对象  传入地址
		doma4j.getDom("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
		//获取XML 信息
		doma4j.showInof();
		//添加XML信息
		doma4j.addInfo();
		//将存到内存的XML 信息持久化到本地为文件中
		try {
			doma4j.save("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
		} catch (UnsupportedEncodingException | FileNotFoundException e) {
			e.printStackTrace();
		}
		//修该XML 信息
		doma4j.amend();
		//删除XML 信息
		doma4j.delete();
	}
}