dom4j學習總結

來源:互聯網
上載者:User
文章目錄
  • DocumentHelper類中有:
  • SAXReader類中有:
  • Document類中有:
  • Element中有:
  • XMLWriter類中有:
  • OutputFormat類中有:
  • Attribute類中有:
一、Dom4j介紹
dom4j是由JDOMTeam Dev分裂後開發出來的包;在hibernate、JAXM中都使用了dom4j;效能來說:Dom4j>JDom>JAXP;二、dom4j APIDocumentHelper類中有:

(1)Document document = DocumentHelper.createDocument();//建立一個document對象,通常用於建立一個xml文檔

(2)Element element = DocumentHelper.createElement();//建立一個element對象,即建立一個標籤

(3)Document document = DocumentHelper.parseText(String xml);//將xml字串轉換成以document為根節點的DOM樹

SAXReader類中有:

(1)SAXReader reader = new SAXReader();

(2)Document document  = reader.read(new File("1.xml"));//讀取並解析1.xml文檔,並返回document

Document類中有:

(1)String text = document.asXML(Document);
//將一顆DOM樹轉為XML字串

(2)Element root = document.getRootElement();
//獲得根節點

Element中有:

(1)Element newelem = elem.addElement("child");
//加入名為child的子標籤,並返回此element

(2)newelem.addAttribute("name","value");
//標籤添加一個屬性

(3)newelem.addText("xxxx"); //為標籤添加一個標籤值

(4)newelem.getText(); //獲得標籤的標籤值

(5)String value = newelem.attributeValue("name");//獲得標籤的屬性值

(6)Iterator iter = newelem.attributeIterator() ;//標籤的屬性迭代器

(7)List childs = newelem.elements(); //獲得標籤的全部子項目

(8)Element child = newelem.element("name");
//獲得標籤的子標籤中的多個<name>標籤中的第一個元素

(9)List childs = newelem.elements("name");
//獲得標籤的子標籤中的全部<name>標籤

(10)newelem.remove(elem); //刪除elem標籤

XMLWriter類中有:

(1)XMLWriter writer = new XMLWriter(OutputStream out,OutputFormat format);

(2)writer.write(document); //輸出document

(3)writer.close(); //關閉XMLWriter流

OutputFormat類中有:

(1)OutputFormat format = OutputFormat.createPrettyFormat();//輸出時排版整齊

(2)OutputFormat format = OutputFormat.createCompactFormat();//輸出時排版緊實

(3)format.setEncoding("UTF-8"); //設定<?xml    ?>中的encoding屬性,預設為UTF-8

Attribute類中有:

(1)attr.setValue("value"); //設定屬性

(2)String value = attr.getValue();

三、dom4j中的CRUD

1.Create

建立一個文檔:

private static void create() throws Exception {Document document = DocumentHelper.createDocument();Element person = DocumentHelper.createElement("person");document.add(person);Element name = person.addElement("name").addAttribute("a", "x").addText("xiazdong");Element age = person.addElement("age").addText("20");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(new FileOutputStream("output.xml"),format);writer.write(document);writer.close();}

插入:

private static void insert(Document document) throws Exception {Element root = document.getRootElement();List list =  root.elements("person");Element person = (Element)list.get(1);Element tmpElement = person.addElement("tmpChild");tmpElement.setText("tmp");//添加標籤值tmpElement.addAttribute("tmpname", "tmpvalue");//添加屬性Element tmp2 = DocumentHelper.createElement("tmpChild2");//建立一個elementtmp2.setText("tmp2");list.add(1,tmp2);//在指定位置添加元素XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"));writer.write(document);writer.close();}

2.Read

private static void read(Document document) throws Exception{Element root = document.getRootElement();Element person = (Element) root.elements("person").get(1);String value = person.element("name").getText();String attri = person.element("name").attributeValue("a");System.out.println(value);System.out.println(attri);}

3.Update

private static void update(Document document) throws Exception{Element root = document.getRootElement();Element name = root.element("person").element("name");name.setText("xiazdong");//更新標籤值name.attribute("a").setValue("bb");//更新屬性值OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"),format);writer.write(document);writer.close();}

4.Delete

private static void delete(Document document) throws Exception {Element root = document.getRootElement();Element name = root.element("person").element("name");name.remove(name.attribute("a"));//刪除attributename.getParent().remove(name);//刪除elementOutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"),format);writer.write(document);writer.close();}

四、亂碼問題在匯入中文時,可能會出現亂碼問題,亂碼圖示:

解決方案:

format.setEncoding("UTF-8");

並且用位元組流輸出

補充:dom4j處理大檔案問題(比如100G)

因為dom方法是將整個XML檔案讀入記憶體,因此如果檔案太大,會出現問題;

我們採用ElementHandler進行解決:每讀一個分支節點,就處理一個分支節點。

SAXReader reader = new SAXReader();reader.addHandler("/subwaycard/card",    //當處理<subwaycard>元素下的<card>子項目時new ElementHandler() {public void onEnd(ElementPath arg0) {   // 處理</card>時Element card = arg0.getCurrent();  //獲得<card>節點card.getParent().remove(card);card.detach();  //將dom樹上的card節點剪枝}public void onStart(ElementPath arg0) {//處理<card>時}});

以上函數會在Document document = reader.read(new File("1.xml")); 調用。

以下代碼可以實現大檔案的刪除操作:

package org.xiazdong.xml;import java.io.File;import java.io.FileOutputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.ElementHandler;import org.dom4j.ElementPath;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class ElementHandlerTest {public static void main(String[] args) throws Exception {SAXReader reader = new SAXReader();reader.addHandler("/subwaycard/card",new ElementHandler() {public void onEnd(ElementPath arg0) {Element card = arg0.getCurrent();card.getParent().remove(card);card.detach();}public void onStart(ElementPath arg0) {}});Document document = reader.read(new File("1.xml"));OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK");XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"),format);writer.write(document);writer.close();}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.