• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • XML(三):xml的解析技術:dom和sax

    標簽: xml

    1. 解析過程圖及優缺點

    在這里插入圖片描述

    2.針對dom和sax的解析器

     1)JAXP  (sun公司提供)
     2)  dom4j  (dom4j組織提供,實際開發中用得最多)
     3)  jdom (很少用)
    

    3.JAXP 使用

    1)javax.xml.parsers包下有四個類:
    DocumentBuilder和DocumentBuilderFactory、
    SaxParser和SaxParserFactory
    2)步驟:

    	     1.創建解析器工廠
    	     2.創建解析器
    	     3.解析xml得到document對象
    	     4.對xml進行增刪改查
    	     5.如果有增刪改操作,要將內存的信息回寫到xml中
    
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <person>
      <p1>
         <name color="red" id="1" style="heigh:30px" width="90">張三</name>
         <age id2="zs">30</age>
      </p1>
      <p1>
         <name color="pink" id="1" width="90">李思</name>
         <age id2="zs">25</age>
      </p1>
    </person>
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    
    public class JaxpTest {
    
    	public static void main(String[] args) throws Exception{
    		   
    		//添加節點   創建節點標簽:createElement 標簽內容:createTextNode  添加節點 appendChild
    		//addNode();	
    		
    		//修改節點  setTextContent
    		//updateNode();
    		
    		//刪除節點(節點不能自己刪除自己,必須由父節點刪除子節點) .getParentNode().removeChild(sex)
    		//delNode();
    			
    		//使用遞歸遍歷xml所有節點
    		findAllNode();
    		
    	}
    	
    	
    	//使用遞歸遍歷所有節點
    	private static void findAllNode() throws Exception {
    		
    		//解析xml
    		Document document = getDocument("src/person.xml");
    		
    		NodeList(document);
    	}
    
    	private static void NodeList(Node node) {
    		//System.out.println("node.getNodeType() :"+node.getNodeType() +"   "+node.ELEMENT_NODE);
    		//判斷是否是元素類型
    		if(node.getNodeType() == node.ELEMENT_NODE)
    		   System.out.println(node.getNodeName());
    		
    		//得到一層子節點
    		NodeList nodeList= node.getChildNodes();
    		for(int i=0;i<nodeList.getLength();i++){
    			NodeList(nodeList.item(i));
    		}
    		
    	}
    
    
    	//刪除節點
    	private static void delNode() throws Exception {
    		//需求:將sex節點刪除  <sex>nan</sex>
            //解析xml
    		Document document = getDocument("src/person.xml");
    		//拿到sex節點
    		Node sex= document.getElementsByTagName("sex").item(0);
    		//根據節點拿到父節點  刪除
    		sex.getParentNode().removeChild(sex);
    		
    		//回寫xml
    		SaveXml(document,"src/person.xml");
    	}
    
    	//修改節點
    	private static void updateNode() throws Exception {
    		//需求:將sex內容改為nan   <sex>nv</sex>
            //解析xml
    		Document document = getDocument("src/person.xml");
    		//拿到sex節點
    		Node sex= document.getElementsByTagName("sex").item(0);
    		//修改內容
    		sex.setTextContent("nan");
    		
    		//添加節點屬性 id
    	    Element sexElement = (Element)sex;
    	    sexElement.setAttribute("id", "test");
    	    
    		//回寫xml
    		SaveXml(document,"src/person.xml");
    	}
    
    	//添加節點
    	private static void addNode() throws Exception {
    		//需求:在第一個p1上加上一個  <sex>nv</sex>
    		
    		//解析xml
    		Document document = getDocument("src/person.xml");
    		
    		//拿到所有p1節點
    		NodeList nodeList = document.getElementsByTagName("p1");
    		//拿到第一個p1節點
    		Node p1 = nodeList.item(0);
    		
    		//創建<sex>節點
    		Element sex = document.createElement("sex");
    		//創建節點內容
    		Text text = document.createTextNode("nv");
    		//將text添加到 sex節點下
    		sex.appendChild(text);
    		
    		//將sex節點添加到p1節點下
    		p1.appendChild(sex);
    		
    		//回寫到xml中
    		SaveXml(document,"src/person.xml");
    	}
    
    	//解析xml
    	private static Document getDocument(String path) throws Exception {
    		//創建解析器工廠
    		DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
    		//創建解析器
    		DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
    		//解析xml返回Document
    		Document document=documentBuilder.parse(path);
    		
    		return document;
    	}
    
    	//回寫xml
    	private static void SaveXml(Document document,String path) throws Exception {
    		// 獲得持久化工廠實例
    		TransformerFactory tfactory = TransformerFactory.newInstance();
    		// 獲得持久化對象
    		Transformer transformer = tfactory.newTransformer();
    		transformer.transform(new DOMSource(document), new StreamResult(path));
     
    		System.out.println("xml回寫寫完成!!!");
    	}
    
    }
    
    
    版權聲明:本文為qq_40408712原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_40408712/article/details/105462913

    智能推薦

    Android之PULL、SAX、DOM解析XML

    背景:解析天氣預報的xml文件,在模擬器顯示 解析前準備 layout目錄下weather.xml 需要解析的文件:raw目錄下的weather1.xml WeatherBean.java MainActivity.java將weather1.xml解析到的信息映射到布局weather.xml中 PULL解析 PULL解析器的運行方式和SAX類似,都是基于事件的模式。不同的是,在PULL解析過程中...

    XML解析___使用Dom or使用Sax

    xml解析方式分為兩種,dom和sax dom:(Document Object Model,即對文檔對象模型)是W3C組織推薦的處理XML的一種方式 Sax:(Simple API for  XML)不是官方標準,但它是xml社區事實上的標準,幾乎所有的xml解析器都支持它。   XML解析開發包 Jaxp、Jdom、dom4J   使用DOM解析XML介紹 DOM...

    使用jdk DOM,SAX和第三方jar包DOM4J創建,解析xml文件

    xml的創建,解析 1. 什么是xml文件 1.1 什么是xml文件 1.2 解析xml的方式,優缺點 2. 使用dom操作xml文件 2.1 使用dom創建xml文件 2.2 使用dom解析xml文件 2.3 使用dom對xml文件增刪改 3. 使用SAX解析xml文件 4. 使用DOM4J操作xml文件 4.1 使用DOM4J創建xml文件 4.2 使用DOM4J解析xml文件 1. 什么是x...

    XML的解析 SAX方式

    XML的解析兩種方式,我們來先看第一種,不需要在內存中排成樹型結構再去解析的。xml文件如下: viewcontroller中實現: 下面看核心部分 自定義解析類 1.創建解析類,并傳入要解析的文件 實現代理方法,開始標簽 發現字符串代理方法 結束標簽代理方法 通過輸出結果我們一起理解一下sax解析過程 可以看到標簽成對解析,開始標簽–發現文本–結束標簽–發現文...

    Java XML 技術:(三)DOM 方式解析 XML 數據

    DOM 方式解析 XML 數據 1.解析 XML 文件的方式 2.DOM 解析 XML 的步驟 1.解析 XML 文件的方式 在 Java 程序中讀取 XML 文件的過程稱為解析 XML DOM 解析 (java 官方提供) SAX 解析(java 官方提供) JDOM 解析(第三方提供) DOM4J 解析(第三方提供) 2.DOM 解析 XML 的步驟 XML: 解析代碼: 效果圖:...

    猜你喜歡

    Xml 解析:(sax 解析)

    sax解析的原理()      解析xml有兩種技術 dom 和sax      根據xml的層級結構在內存中分配一個樹形結構      把xml中標簽,屬性,文本封裝成對象      sax方式:事件驅動,邊讀邊解析   &nb...

    XML解析器:DOM、SAX、DOM4J

    ※ XML學習 W3CSchool.chm文件 W3CSchool.chm.zip ※ XML解析器 JAXP介紹(Java API for XMLProcessing) JAXP 是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包組成. 在 javax.xml.parsers 包中,定義了幾個工廠類,程序員調用這些工廠類,可以得到對xml文檔...

    XML介紹及DOM解析&SAX解析——學習筆記

    目錄 一、XML簡介 (1)XML和HTML (2)什么是XML 二、XML元素VS節點 三、DOM方式解析XML原理 四、SAX方式解析XML原理 五、JDOM工具解析 六、DOM4J工具解析 一、XML簡介 (1)XML和HTML          XML   被設計用來傳輸和存儲數據。 &nb...

    android SAX解析XML

    SAX(Simple APIfor XML)解析器是一種基于事件的解析器,事件驅動的流式解析方式是,從文件的開始順序解析到文檔的結束,不可暫停或倒退。它的核心是事件處理模式,主要是圍繞著事件源以及事件處理器來工作的。當事件源產生事件后,調用事件處理器相應的處理方法,一個事件就可以得到處理。在事件源調用事件處理器中特定方法的時候,還要傳遞給事件處理器相應事件的狀態信息,這樣事件處理器才能夠根據提供的...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    精品国产乱码久久久久久蜜桃不卡