DOM4解析xml

import java.awt.List;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

/*
 * DOM4J方法解析xml
 */
/*
 * 思路:
 * 第一步:获得解析器
 * 第二步:解析器要读取那个文档
 * 第三步:读取了xml文档准备进行什么操作(增删改查)
 * 获得根元素进行操作,操作都要先获得根节点document.getRootElement();
 * 然后根据根节点的root.element("elementName")表示下一个子节点,可以
 * root.element("name").element(name)一直往下读取
 * 如果是第二本书root.element("elementName").get(1);进行操作
 * 增加节点用addElement()方法,documentHelper.createElement()
 */

/*
<?xml version="1.0" encoding="UTF-8"?>
<BookStore> 
  <myBook NO="1"> 
    <Book> 
      <BookName ID="A001">JAVA</BookName>  
      <love>I love you</love>
      <Author>Jack</Author>  
      <Price>110</Price>  
      <City>nanjing</City> 
    </Book>  
    <Book> 
      <BookName ID="A002">android</BookName>  
      <Author>Lucy</Author>  
      <Price>20</Price> 
    </Book> 
  </myBook> 
</BookStore>
*/
 
public class DOM4J {

	@Test
	public void readContent()throws Exception
	{
		//读取第二本书的书名<BookName ID="A002">android</BookName>
		SAXReader reader=new SAXReader();
		Document d=reader.read(new File("src/book.xml"));
		//先得到根节点<BookStore>,在<Book>,在<BookName>
	    Element root=d.getRootElement();
	   Element element= (Element) root.element("myBook").elements().get(1);
	   System.out.println(element.element("BookName").getText());
	   
	}
	@Test
	public void readAttr()throws Exception
	{
		//读取第二本书的书名的属性ID<BookName ID="A002">android</BookName>
		//先获得解析器
		SAXReader reader =new SAXReader();
	    Document document= reader.read(new File("src/book.xml"));
	    
	    //获得第二本书的属性,先获得根节点,再获得子节点的
	   Element root= document.getRootElement();
	  Element element=(Element) root.element("myBook").elements("Book").get(1);
	 String str=element.element("BookName").attributeValue("ID");
	 System.out.println(str);
	}
	
	@Test
	public void add()throws Exception
	{
		//往第一本书上加入<City>nanjing</City>
		SAXReader reader=new SAXReader();
	    Document document=reader.read(new File("src/book.xml"));
	    
	   Element rootElement= document.getRootElement();
	 Element book= rootElement.element("myBook").element("Book");//获取到了book的节点
	 book.addElement("City").setText("nanjing");
	 
	 //增加节点后,要保存进xml内存中去
	 OutputFormat format=OutputFormat.createPrettyPrint();//格式化xml代码
	 XMLWriter writer=new XMLWriter(new FileWriter("src/book.xml"), format);
	 writer.write(document);//讲document写入writer,writer在写入src/book.xml中 
	 writer.close();
		
	}
	
	

	@Test
	public void addBySomeWhere()throws Exception
	{
		//往指定位置添加,更改保存所有孩子的list集合的顺序
		//往第一本书第二个位置加入<love>I love you</love>
		SAXReader reader=new SAXReader();
	    Document document=reader.read(new File("src/book.xml"));
	
	    //先获得根节点下的孩子集合list[BookName],[author],[price],[city]
	   java.util.List list=document.getRootElement().element("myBook").element("Book").elements();
	   
	   //创建节点
	  Element element=DocumentHelper.createElement("love");
	  element.setText("I love you");
	  list.add(1, element);//把该节点放在第二个位置上去 
	    
	
	 //增加节点后,要保存进xml内存中去
	 OutputFormat format=OutputFormat.createPrettyPrint();//格式化xml代码
	 XMLWriter writer=new XMLWriter(new FileWriter("src/book.xml"), format);
	 writer.write(document);//讲document写入writer,writer在写入src/book.xml中 
	 writer.close();
		
	}
	
	@Test
	public void delete()throws Exception
	{
		//删除第二本书的<Price>20</Price> 
		SAXReader reader=new SAXReader();
	Document document=reader.read(new File("src/book.xml"));
   Element element=(Element) document.getRootElement().element("myBook").elements("Book").get(1);
   Element child= element.element("Price");
    element.remove(child);
    
    XMLWriter writer=new XMLWriter(new FileOutputStream("src/book.xml"), OutputFormat.createPrettyPrint());
    writer.write(document);
    writer.close();
	}
	@Test
	public void mytest()throws Exception
	{
		//遍历节点
		SAXReader reader=new SAXReader();
	Document document=reader.read(new File("src/book.xml"));
	Element rootElement=document.getRootElement();
Iterator tIterator=rootElement.elementIterator();
	while(tIterator.hasNext())
	{
	Element myeElement=(Element) tIterator.next();
	System.out.println(myeElement.getName());
	}
		
	}
}