天天看點

Dom4j總結

Dom4j的簡單介紹 1、 Dom4j是一個 簡單、靈活的開放源代碼的庫。Dom4j是由早期開發JDOM開發的。與JDOM不同的是,dom4j使用接口和抽象的人分離出來而後獨立基類,雖然Dom4j的API相對要複雜一些,但它提供了比JDOM更好的靈活性。 2、 Dom4j是一個非常優秀的Java XML API,具有 性能優異、功能強大和極易使用的特點。現在很多軟體采用的Dom4j,例如 Hibernate,包括sun公司自己的JAXM也用了Dom4j。 3、  使用Dom4j開發,需下載下傳dom4j相應的 jar 檔案。 DOM4j中,獲得Document對象的方式有 三種:        1. 讀取 XML 檔案 , 獲得 document 對象                         SAXReader reader = new SAXReader();

                 Document   document = reader.read(new File("input.xml"));          2. 解析 XML 形式的文本 , 得到 document 對象 .                  String text = "<members></members>";

                  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());   事例:              

public class

GoodWell03 {      

public static void

main(String[] args)

throws

Exception {               SAXReader sreader =

new

SAXReader();               Document doc = sreader.read(

new

File( "src//Book.xml" ));               Element root = doc.getRootElement();                System. out .println(root.getName());               perse(root);     }        

private static void

perse(Element root) {        atter(root);       

for

(Iterator<Element> it=root.elementIterator();it.hasNext();){            Element entity=it.next();           

if

(entity.isTextOnly()){               atter(entity);               System. out .println(entity.getText());// 周遊所有            }

else

{               perse(entity);            }        }            }    

private static void

atter(Element root) {        //

TODO

Auto-generated method stub       

for

(Iterator<Attribute> it=root.attributeIterator();it.hasNext();){            Attribute entity=it.next();            System. out .println(entity.getName()+ "    " +entity.getValue());                   }     } }   節點對象屬性:   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); . 周遊某節點的所有屬性

   Element root=document.getRootElement();    

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

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

         String text=attribute.getText();

         System.out.println(text);

    }   4、 設定某節點的屬性和文字.

   newMemberElm.addAttribute("name", "sitinspring");   5、 設定屬性的文字

   Attribute attribute=root.attribute("name");

   attribute.setText("sitinspring");        将文檔寫入xml檔案 1、文檔中全為英文,不設定編碼,直接寫入的形式.

 XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));

 writer.write(document);

 writer.close();   2、文檔中含有中文,設定編碼格式寫入的形式.

OutputFormat format = OutputFormat.createPrettyPrint();

// 指定XML編碼                   format.setEncoding("GBK");       

XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);

writer.write(document);

writer.close();   事例:               Document doc=DocumentHelper.createDocument();               Element root=doc.addElement( "books" );               Element book=root.addElement( "book" );               book.addAttribute( "isbn" , "112" );               Element name=book.addElement( "name" );               name.setText( "java" );               Element author=book.addElement( "author" );               author.setText( "goodwell" );               Element price=book.addElement( "price" );               price.setText( "112" );               OutputFormat format=

new

OutputFormat( "    " ,

true

, "UTF-8" );        XMLWriter xw=

new

XMLWriter(

new

  FileWriter( "src//bk.xml" ),format);               xw.write(doc);           xw.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(1, aaa); //更新document                      SAXReader reader=

new

SAXReader();               Document doc=reader.read(

new

File( "src//bk.xml" ));               Element root=doc.getRootElement();               Element address=DocumentHelper.createElement( "address" );               address.setText( " 保定 " );               Element el= (Element) root.elements( "book" ).get(1);               List list1=el.elements();               list1.add(2, address);               // 删除第二個 book 中的位址               Element element=(Element) root.elements("book").get(1);               Element el=element.element("address");               element.remove(el);               OutputFormat format=

new

OutputFormat( "    " ,

true

, "UTF-8" );               XMLWriter xw=

new

XMLWriter(

new

FileWriter( "src//bk.xml" ),format);               xw.write(doc);               xw.close();