java与xml之DOM4J生成和解析XML文档

虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、 
XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J 
API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。

    
为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

    在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比 
JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。

    DOM4J是一个非常非常优秀的Java XML 
API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写 
XML,特别值得一提的是连Sun的JAXM也在用DOM4J.

[java]  view plain  copy
  1. package com.mdy.xml.xmldemo;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.UnsupportedEncodingException;  
  8. import java.util.Iterator;  
  9.   
  10. import org.dom4j.Attribute;  
  11. import org.dom4j.Document;  
  12. import org.dom4j.DocumentException;  
  13. import org.dom4j.DocumentHelper;  
  14. import org.dom4j.Element;  
  15. import org.dom4j.io.OutputFormat;  
  16. import org.dom4j.io.SAXReader;  
  17. import org.dom4j.io.XMLWriter;  
  18.   
  19. import com.mdy.xml.XMLDocument;  
  20.   
  21. public class Dom4JDemo implements XMLDocument {  
  22.       
  23.     public static void main(String[] args) {  
  24.         String fileName = "dom4jdemo.xml";  
  25.         Dom4JDemo dom4jDemo = new Dom4JDemo();  
  26.         dom4jDemo.createXML(fileName);  
  27.         dom4jDemo.parserXML(fileName);  
  28.     }  
  29.       
  30.   
  31.     @Override  
  32.     public void createXML(String fileName) {  
  33.         Document document = DocumentHelper.createDocument();  
  34.         Element books = document.addElement("books");  
  35.         // 循环创建三本书  
  36.         for(int i = 0;i<3;i++){  
  37.             Element book = books.addElement("book");  
  38.             book.addAttribute("id", (i+1)+"");  
  39.             Element bookName = book.addElement("name");  
  40.             bookName.setText("书本"+i);  
  41.             Element bookPrice = book.addElement("price");  
  42.             bookPrice.setText((i+1)*50+"");  
  43.             Element bookAuthor = book.addElement("author");  
  44.             bookAuthor.setText("作者"+i);  
  45.         }  
  46.         try {  
  47.             OutputFormat xmlFormat = new OutputFormat();    
  48.             xmlFormat.setEncoding("UTF-8");  
  49.             //xmlFormat.setNewlines(true); // 设置换行  
  50.             //xmlFormat.setIndent(true);   // 设置缩进  
  51.             XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(fileName),xmlFormat);  
  52.             xmlWriter.write(document);  
  53.             xmlWriter.close();  
  54.         } catch (UnsupportedEncodingException e) {  
  55.             e.printStackTrace();  
  56.         } catch (FileNotFoundException e) {  
  57.             e.printStackTrace();  
  58.         } catch (IOException e) {  
  59.             e.printStackTrace();  
  60.         }  
  61.           
  62.     }  
  63.   
  64.     @Override  
  65.     public void parserXML(String fileName) {  
  66.         SAXReader reader = new SAXReader();  
  67.         try {  
  68.             Document document = reader.read(new FileInputStream(fileName));  
  69.             Element root = document.getRootElement();  
  70.             getNode(root);  
  71.         } catch (FileNotFoundException e) {  
  72.             e.printStackTrace();  
  73.         } catch (DocumentException e) {  
  74.             e.printStackTrace();  
  75.         }  
  76.     }  
  77.   
  78.     public void getNode(Element node){  
  79.         if(node.getText() != null && !"".equals(node.getText().trim())){  
  80.             System.out.print("解析节点:"+node.getName());  
  81.             System.out.println("--->"+node.getText());  
  82.         }else{  
  83.             System.out.println("解析节点:"+node.getName());  
  84.         }  
  85.         Iterator attIterator = node.attributeIterator();  
  86.         while(attIterator.hasNext()){  
  87.             Attribute attribute = (Attribute)attIterator.next();  
  88.             System.out.println("属性:"+attribute.getName()+":"+attribute.getValue());  
  89.         }  
  90.         Iterator iterator = node.elementIterator();  
  91.         while (iterator.hasNext()) {  
  92.             getNode((Element) iterator.next());  
  93.         }  
  94.     }  
  95. }  

运行程序:

生成了dom4jdemo.xml文件:

[html]  view plain  copy
  1. <pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <books>  
  4.   <book id="1">  
  5.     <name>书本0</name>  
  6.     <price>50</price>  
  7.     <author>作者0</author>  
  8.   </book>  
  9.   <book id="2">  
  10.     <name>书本1</name>  
  11.     <price>100</price>  
  12.     <author>作者1</author>  
  13.   </book>  
  14.   <book id="3">  
  15.     <name>书本2</name>  
  16.     <price>150</price>  
  17.     <author>作者2</author>  
  18.   </book>  
  19. </books>  

 


解析内容如下:

[plain]  view plain  copy
  1. 解析节点:books  
  2. 解析节点:book  
  3. 属性:id:1  
  4. 解析节点:name--->书本0  
  5. 解析节点:price--->50  
  6. 解析节点:author--->作者0  
  7. 解析节点:book  
  8. 属性:id:2  
  9. 解析节点:name--->书本1  
  10. 解析节点:price--->100  
  11. 解析节点:author--->作者1  
  12. 解析节点:book  
  13. 属性:id:3  
  14. 解析节点:name--->书本2  
  15. 解析节点:price--->150  
  16. 解析节点:author--->作者2  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值