zoukankan      html  css  js  c++  java
  • 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());
    	}
    		
    	}
    }
    

      

  • 相关阅读:
    long类型和int类型的区别!!!!!
    Java-冒号的作用
    Java Scanner类
    jre安装过程
    76. 最小覆盖子串
    75. 颜色分类
    73. 矩阵置零
    72. 编辑距离
    71. 简化路径
    61. 旋转链表
  • 原文地址:https://www.cnblogs.com/linhong/p/4392918.html
Copyright © 2011-2022 走看看