天天看点

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();