zoukankan      html  css  js  c++  java
  • DOM解析xml

    解析xml如下

    <?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>
    

      

    import java.io.FileOutputStream;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.junit.Test;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    //优点:增删改查容易
    //缺点:内存消耗较大,直接把XML封装成对象如果XML有1G,直接加入到内存中,可能会造成内存泄漏
            //1:创建文档构建的工厂
    		//2:获得dom解析器
    		//3:解析xml文档,得到代表文档的document
           //DOM getElementsByTagName()获取元素,在进行相关操作
           //Dom4j document.getRootElement()...element().elements()..;
    /*
     * <?xml version="1.0" encoding="utf-8"?>
    <BookStore>
        <Book>
             <BookName>JAVA</BookName>
             <Author>Jack</Author>
             <Price>110<Price> 
        </Book>
        <Book>
             <BookName>android</BookName>
             <Author>simant</Author>
             <Price>200<Price> 
        </Book>
    </BookStore>
    */
    
    /*
     * DOM方法解析xml
     */
    public class DOM {
    
    	@Test
    	public void test1()throws Exception
    	{
    		//1:创建工厂
    		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    		//2:获得dom解析器
    		DocumentBuilder build=factory.newDocumentBuilder();
    		//3:解析xml文档,得到代表文档的document
    	    Document document=build.parse("src/book.xml");	
    	}
        @Test
        public void read()throws Exception
        {
        	//读取<BookName>android</BookName>中的值android
        	DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    		DocumentBuilder build=factory.newDocumentBuilder();
    	    Document document=build.parse("src/book.xml");
    	    
    	    NodeList list = document.getElementsByTagName("BookName");//表示获取BooKName标签的所有节点list
    	    Node node=list.item(1);//表示获取第二个BooKName的节点
    	    String content=node.getTextContent();
    	    System.out.println(content);
    	}
        @Test
        public void read1()throws Exception
        {
        	// <BookName ID="A001">JAVA</BookName>获得指定标签的属性
        	DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    		DocumentBuilder build=factory.newDocumentBuilder();
    	    Document document=build.parse("src/book.xml");
        	
    	   Node node=document.getElementsByTagName("BookName").item(0);
    	   NamedNodeMap s= node.getAttributes();
    	   System.out.println(s.getNamedItem("ID"));
    	   
        }
        @Test
        public void add()throws Exception
        {
        	//创建节点<City>nanjing</City>
        	DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    		DocumentBuilder build=factory.newDocumentBuilder();
    	    Document document=build.parse("src/book.xml");
    	    
    	    //创建节点
    	    Element  element=document.createElement("City");
    	    element.setTextContent("nanjing");
    	    
    	    //把创建的节点放在第一本书上
    	    Element list=(Element) document.getElementsByTagName("BookName").item(0);
    	    list.appendChild(element);
    	    
    	    //把更新后的内存写入xml文档
    	    TransformerFactory factory2=TransformerFactory.newInstance();
    	    Transformer tran=factory2.newTransformer();
    	    tran.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
    	    
        }
       
        @Test
        public void delete()throws Exception
        {
        	//删除节点 第二本书的作者<Author>Lucy</Author>
        	DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    		DocumentBuilder build=factory.newDocumentBuilder();
    	    Document document=build.parse("src/book.xml");
    	    
    	    //得到要删除的element
    	  Node Childnode=document.getElementsByTagName("Author").item(1);
    	  
    	  /*  //得到要删除节点的父节点
    	  Node Parentnode=document.getElementsByTagName("BooK").item(1);
    	  Parentnode.removeChild(Childnode);
    	  */
    	  
    	  Childnode.getParentNode().removeChild(Childnode);//等价于上面删除
    	  
    	  //Childnode.getParentNode().getParentNode().getParentNode().removeChild(Childnode.getParentNode().getParentNode());//删掉所有
    	    
    	    //把更新后的内存写入xml文档
    	    TransformerFactory factory2=TransformerFactory.newInstance();
    	    Transformer tran=factory2.newTransformer();
    	    tran.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
    	    
        }
        @Test
        public void update()throws Exception
        {
        	//  <Price>200</Price> 对第二本书的价格进行更改为20
        	DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    		DocumentBuilder build=factory.newDocumentBuilder();
    	    Document document=build.parse("src/book.xml");
    	    
              	    
    	   Node node=document.getElementsByTagName("Price").item(1);
    	   node.setTextContent("20");
    	    
        	//把更新后的内存写入xml文档
    	    TransformerFactory factory2=TransformerFactory.newInstance();
    	    Transformer tran=factory2.newTransformer();
    	    tran.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
    	    
        } 
    }
    

      

  • 相关阅读:
    Ajax中onreadystatechange函数不执行,是因为放在open()后
    js调用ajax案例2,使用ok
    js调用ajax案例
    通过设置ie的通过跨域访问数据源,来访问本地服务
    Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题
    Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较
    windows 系统纯净版官网下载地址
    iOS:给Git仓库上传代码时,超过100M会被拒绝(例如github和oschina)
    iOS:Xcode8以下真机测试iOS10.0和iOS10.1配置包
    iOS:高德地图的使用
  • 原文地址:https://www.cnblogs.com/linhong/p/4392913.html
Copyright © 2011-2022 走看看