天天看點

DOM4J解析XML文檔

DOM4j中,獲得Document對象的方式有三種:

  1. 讀取XML檔案,獲得document對象

    SAXReader reader = new SAXReader();

    Document document = reader.read(new File(“input.xml”));

  2. 解析XML形式的文本,得到document對象.

    String text = ““;

    Document document = DocumentHelper.parseText(text);

  3. 主動建立document對象.

    Document document = DocumentHelper.createDocument();

    //建立根節點

    Element root = document.addElement(“members”);

節點對象:

  1. 擷取文檔的根節點.

    Element root = document.getRootElement();

  2. 取得某個節點的子節點.

    Element element=node.element(“書名”);

  3. 取得節點的文字

    String text=node.getText();

  4. 取得某節點下所有名為“member”的子節點,并進行周遊.

    List nodes = rootElm.elements(“member”);

    for (Iterator it = nodes.iterator(); it.hasNext();) {

    Element elm = (Element) it.next();

    // do something

    }

  5. 對某節點下的所有子節點進行周遊.

    for(Iterator it=root.elementIterator();it.hasNext();){

    Element element = (Element) it.next();

    // do something

    }

  6. 在某節點下添加子節點.

    Element ageElm = newMemberElm.addElement(“age”);

  7. 設定節點文字.

    element.setText(“29”);

  8. 删除某節點.

    //childElm是待删除的節點,parentElm是其父節點

    parentElm.remove(childElm);

  9. 添加一個CDATA節點.

    Element contentElm = infoElm.addElement(“content”);

    contentElm.addCDATA(diary.getContent());

節點對象屬性 

  1. 取得某節點下的某屬性

    Element root=document.getRootElement();

    //屬性名name

    Attribute attribute=root.attribute(“size”);

  2. 取得屬性的文字

    String text=attribute.getText();

  3. 删除某屬性

    Attribute attribute=root.attribute(“size”);

    root.remove(attribute);

  4. 周遊某節點的所有屬性

    Element root=document.getRootElement();

    for(Iterator it=root.attributeIterator();it.hasNext();){

    Attribute attribute = (Attribute) it.next();

    String text=attribute.getText();

    System.out.println(text);

    }

  5. 設定某節點的屬性和文字.

    newMemberElm.addAttribute(“name”, “sitinspring”);

  6. 設定屬性的文字

    Attribute attribute=root.attribute(“name”);

    attribute.setText(“sitinspring”);

将文檔寫入XML檔案

  1. 文檔中全為英文,不設定編碼,直接寫入的形式.
XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));
  writer.write(document);
  writer.close();
           
  1. 文檔中含有中文,設定編碼格式寫入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML編碼                   
     format.setEncoding("GBK");       
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
           

Dom4j在指定位置插入節點

  1. 得到插入位置的節點清單(list)
  2. 調用list.add(index,elemnent),由index決定element的插入位置。

    Element元素可以通過DocumentHelper對象得到。示例代碼:

Element aaa = DocumentHelper.createElement("aaa");
aaa.setText("aaa");

List list = root.element("書").elements();
list.add(, aaa);

//更新document
           

字元串與XML的轉換

  1. 将字元串轉化為XML
String text = "<members> <member>sitinspring</member></members>";
Document document = DocumentHelper.parseText(text);
           
  1. 将文檔或節點的XML轉化為字元串.
SAXReader reader = new SAXReader();
 Document   document = reader.read(new File("input.xml"));            
 Element root=document.getRootElement();    

 String docXmlText=document.asXML();

 String rootXmlText=root.asXML();
 Element memberElm=root.element("member");
 String memberXmlText=memberElm.asXML();