国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

xml文檔解析之dom4j的增刪改查 ,亂碼問題

2019-11-08 03:03:58
字體:
來源:轉載
供稿:網友

基于Dom解析和SAX解析這兩種解析思想,出現了許多解析API,其中dom4j可以使用dom解析的方式高效的解析xml文檔。dom4j解析在使用時需要導入第三方jar包,dom4j的開發包可以在網上找得到。導入開發包時一般只需要導入核心的開發包就可以直接使用,如果是在使用的過程當中提示缺少什么包可以到dom4j的lib目錄下導入缺少的開發包即可。使用dom4j實現xml文檔的增刪改查的基本操作。首先還是準備一個xml文檔。

<books>       <book>          <title>java從入門到放棄</title>          <PRice>10元</price>          <author age="12歲">張三</author>      </book>      <book>          <title>C語言從入門到放棄</title>          <price>12元</price>    <author>李四</author>    </book>    </books>  首先我們要先了解dom4j中的一些方法,通過查閱api可以得到得到,就不在贅述了。利用dom4j實現的的增刪改查的操作。

增:在指定的位置處插入一個節點,首先利用DocumentHelper里面的createElement方法創建一個節點,然后在使用setText設置節點的標簽體以及屬性等,接著找到要插入位置的父節點,利用父節點身上的add方法添加節點。

刪:在指定的位置刪除某一個節點。首先要找到這個節點,接著找到這個節點的父節點,然后利用父節點的remove方法刪除節點。

改:修改某個節點的屬性或者標簽體,還是找到這個節點利用addAttribute方法修改屬性,當節點沒有這個屬性時就自動加上,有的話就自動更新。當屬性的值設置為null是表示刪除這個屬性。

查:沒什么好說的。

要特別注意的是增刪改,對xml的增刪改只是對內存當中的document對象進行操作,如果希望修改對xml文檔起作用,還需要將內存當中的document對象寫入xml文檔中,但是還要注意xml亂碼的問題。

xml亂碼的問題:dom4j將文檔載入內存時使用的是xml文檔申明時中的Encoding屬性的編碼集進行的編碼,如果在此時使用的writer的內部編碼集與最初載入時的編碼集不同時,就會出現亂碼問題,下面使用了幾種不同的方式解決xml亂碼的問題。

java實現:1.查找第二本書的名字和作者的名字。2。向book下面插入sale-price標簽,并將第一本書設置為12元,第二本書設置為19元。3.將第一本書的sale-price刪除掉.4將第一本書的作者的年齡改為22歲。

package com.hhuc.Dom4j;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;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;public class Dom4jDemo2 {	@Test	public void find() throws DocumentException{		SAXReader reader=new SAXReader();//創建解析器		Document  document=reader.read("book.xml");//利用解析器讀入xml文檔		Element dom=document.getRootElement();//獲取文檔的根節點		List<Element> list=dom.elements();//返回包含在dom根節點里面的元素book		String bookname=list.get(1).elementText("title");		//String bookname1=list.get(1).element("title").getText();		//System.out.println(bookname1);		String attribute=list.get(0).elementText("author");		System.out.println(attribute);	}	@Test	public void add() throws DocumentException, IOException{		SAXReader reader=new SAXReader();//創建解析器		Document document=reader.read("book.xml");//利用解析器讀入xml文檔		 Element dom=document.getRootElement();//獲取文檔的根節點		 		Element  addele=DocumentHelper.createElement("sale-price");		Element addele1=DocumentHelper.createElement("sale-price");		addele.setText("12元");addele1.setText("19元");				list.get(0).add(addele);		list.get(1).add(addele1);			OutputStreamWriter out=new OutputStreamWriter(new FileOutputStream("book.xml"),"utf-8");		dom.write(out);		out.flush();out.close();			}	@Test	public void delete() throws DocumentException, IOException{		SAXReader sr = new SAXReader();//創建解析器		Document domcument = sr.read("book.xml");//利益能夠解析器讀入xml文檔		Element dom =domcument.getRootElement();//獲取xml文檔根節點		Element ele=dom.element("book").element("sale-price");		ele.getParent().remove(ele);		OutputFormat format=OutputFormat.createPrettyPrint();//格式化輸出		format.setEncoding("gb2312");		XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"),format);		writer.write(domcument);		writer.flush();		writer.close();	}	@Test	public void transform() throws DocumentException, IOException{		SAXReader sr=new SAXReader();//創建解析器		Document document=sr.read("book.xml");//讀入xml文檔		Element root=document.getRootElement();//獲取根節點		Element author=root.element("book").element("author");		author.addAttribute("age", "22");		OutputFormat format=OutputFormat.createPrettyPrint();		XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("book.xml"),"utf-8"),format);		writer.write(document);		writer.flush();writer.close();	}}運行結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍梧县| 南平市| 宣武区| 曲周县| 肥乡县| 福鼎市| 成安县| 南陵县| 余姚市| 紫阳县| 乌兰浩特市| 临清市| 小金县| 元谋县| 罗甸县| 苏尼特左旗| 福泉市| 临城县| 利津县| 长宁区| 汉中市| 弥勒县| 石棉县| 孝义市| 徐汇区| 青阳县| 平果县| 岚皋县| 定州市| 塘沽区| 阜新| 洪泽县| 高碑店市| 安义县| 通渭县| 楚雄市| 福泉市| 福泉市| 大渡口区| 应用必备| 原阳县|