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

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐