dom4j组装xml 以及解析xml

使用dom4j解析xml文件以及 将object组装成xml文件,具体代码如下:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package xml;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.FileWriter;  
  6. import java.io.IOException;  
  7. import java.util.Iterator;  
  8. import java.util.List;  
  9.   
  10. import javax.xml.parsers.DocumentBuilder;  
  11. import javax.xml.parsers.DocumentBuilderFactory;  
  12. import javax.xml.parsers.ParserConfigurationException;  
  13.   
  14. import org.dom4j.Document;  
  15. import org.dom4j.DocumentException;  
  16. import org.dom4j.DocumentHelper;  
  17. import org.dom4j.Element;  
  18. import org.dom4j.io.DOMReader;  
  19. import org.dom4j.io.OutputFormat;  
  20. import org.dom4j.io.SAXReader;  
  21. import org.dom4j.io.XMLWriter;  
  22.   
  23.     
  24. import org.w3c.dom.Node;    
  25. import org.w3c.dom.NodeList;   
  26. import org.xml.sax.SAXException;  
  27.   
  28. /** 
  29.  *@author WHD 
  30.  *data 2016年1月10日 
  31.  */  
  32. public class Dom4j {  
  33.      public static void main(String[] args)   
  34.         {  
  35.          Dom4j   dom4j= new Dom4j();  
  36.          try {  
  37.             dom4j.objectToXml();  
  38.         } catch (Exception e) {  
  39.             // TODO Auto-generated catch block  
  40.             e.printStackTrace();  
  41.         }  
  42.         }  
  43.        
  44.      // 获取并解析xml格式文件为object  
  45.      public void xmlToObject() throws ParserConfigurationException, DocumentException, SAXException, IOException{  
  46.            SAXReader saxReader = new SAXReader();  
  47.                 //将获取的xml 转化为document 文档  
  48.         //这里使用了File当然也可以使用URL()从指定url获取xml并进行解析   
  49.             Document document = saxReader.read(new File("F:/student2.xml"));  
  50.             // 获取根元素  
  51.             Element root = document.getRootElement();  
  52.             // 根元素名称  
  53.             System.out.println("Root----: " + root.getName());  
  54.               
  55.             // 获取所有子元素  
  56.             List<Element> childList = root.elements();  
  57.             System.out.println("total child count: " + childList.size());  
  58.   
  59.             // 获取特定名称的子元素  
  60.             List<Element> childList2 = root.elements("hello");  
  61.             Element  helloElement= root.element("hello");  
  62.             System.out.println("hello child: " + childList2.size());  
  63.             // 获取特定名称的子元素的值  
  64.             System.out.println("hello----"+childList2.get(0).getText());  
  65.             System.out.println("hello----"+helloElement.getText().trim());  
  66.             System.out.println("迭代输出-----------------------");  
  67.             // 迭代输出  
  68.             for (Iterator iter = root.elementIterator(); iter.hasNext();)  
  69.             {   // 获取根目录下的元素  
  70.                 Element e = (Element) iter.next();  
  71.                 // 获取元素对应的值  
  72.                 System.out.println(e.getText());  
  73.                 // 元素的属性个数  
  74.                 System.out.println(e.attributeCount());  
  75.                 //获取元素的第一个属性的名称  
  76.                 System.out.println(e.attribute(0).getName());  
  77.                 //获取元素的第一个属性的值  
  78.                 System.out.println(e.attribute(0).getValue());  
  79.                 //获取元素的第二个属性的名称  
  80.                 System.out.println(e.attribute(1).getName());  
  81.               //获取元素的第二个属性的值  
  82.                 System.out.println(e.attribute(1).getValue());  
  83.                 //按照属性名称获取属性值  
  84.                 System.out.println("are you ok :"+e.attributeValue("age"));  
  85.                 System.out.println("are you ok :"+e.attributeValue("name"));  
  86.             }  
  87.                 // 使用DOMReader将xml转化为object  
  88.             System.out.println("用DOMReader-----------------------");  
  89.             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  90.             DocumentBuilder db = dbf.newDocumentBuilder();  
  91.             // 注意要用完整类名  
  92.             //将获取的xml 转化为document 文档  
  93.             org.w3c.dom.Document document2 = db.parse(new File("F:/student2.xml"));  
  94.   
  95.             DOMReader domReader = new DOMReader();  
  96.   
  97.             // 将JAXP的Document转换为dom4j的Document  
  98.             Document document3 = domReader.read(document2);  
  99.   
  100.             Element rootElement = document3.getRootElement();  
  101.   
  102.             System.out.println("Root: " + rootElement.getName());  
  103.         }  
  104.        
  105.       // 将对象组装成xml格式文件并保存  
  106.      public void objectToXml ()throws Exception{  
  107.   
  108.             // 第一种方式:创建文档,并创建根元素  
  109.             // 创建文档:使用了一个Helper类  
  110.             Document document = DocumentHelper.createDocument();  
  111.             // 创建根节点并添加进文档  
  112.             Element root = DocumentHelper.createElement("student");  
  113.             document.setRootElement(root);  
  114.   
  115.             // 第二种方式:创建文档并设置文档的根元素节点  
  116.             Element root2 = DocumentHelper.createElement("student");  
  117.             Document document2 = DocumentHelper.createDocument(root2);  
  118.             // 给元素添加属性  
  119.             root2.addAttribute("name""zhangsan");  
  120.             // 添加子节点:add之后就返回这个元素  
  121.             Element helloElement = root2.addElement("hello");  
  122.             Element worldElement = root2.addElement("world");  
  123.             //给元素添加属性key-value  
  124.             worldElement.addAttribute("age","12");  
  125.             worldElement.addAttribute("name","www");  
  126.             helloElement.addAttribute("age","13");  
  127.             helloElement.addAttribute("name","wws");  
  128.             //元素的节点的值  
  129.             helloElement.setText("hello Text");  
  130.             worldElement.setText("world text");  
  131.             // 输出  
  132.             // 输出到控制台  
  133.             XMLWriter xmlWriter = new XMLWriter();  
  134.             xmlWriter.write(document);  
  135.   
  136.             //输出到文件  
  137.             //其中的"  "表示格式,true参数表示另起一行,gb2312表示编码,如果不写这个参数则默认utf-8编码  
  138.             //1、OutputFormat format=new OutputFormat("  ",true,"gb2312");   
  139.             //生成压缩格式、紧凑格式的xml  其中的compactFormat 翻译:压缩格式      
  140.             //2、 OutputFormat format = OutputFormat.createCompactFormat();  
  141.             //调用静态方法创建一个没有格式的打印方式  
  142.             //3、 OutputFormat format = OutputFormat.createPrettyPrint();      
  143.             //format.setEncoding("gb2312");  // 设置编码  
  144.             OutputFormat format = new OutputFormat("  "true);// 设置缩进为2个空格,并且另起一行为true  
  145.             XMLWriter xmlWriter2 = new XMLWriter(  
  146.                     new FileOutputStream("F:/student1.xml"), format);  
  147.             xmlWriter2.write(document2);  
  148.             xmlWriter2.flush();  
  149.             xmlWriter2.close();  
  150.   
  151.             // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白,调用close() 方法释放资源  
  152.             XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("F:/student2.xml"),  
  153.                     format);  
  154.             xmlWriter3.write(document2);  
  155.             xmlWriter3.flush();  
  156.             xmlWriter3.close();  
  157.      }  
  158. }  

执行生生成的文件以及加载解析的文件截图如下:



转自:http://blog.csdn.net/qh_java/article/details/38406697

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DOMdom4j都是用于解析XML文档的工具,它们的使用方法略有不同。下面分别介绍DOMdom4j解析XML的使用方法: 1. 使用DOM解析XML 使用DOM解析XML时,需要按照以下步骤进行: ```java // 1. 创建 DocumentBuilderFactory 对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2. 创建 DocumentBuilder 对象 DocumentBuilder builder = factory.newDocumentBuilder(); // 3. 通过 DocumentBuilder 解析 XML 文件,得到 Document 对象 Document document = builder.parse(new File("xml文件路径")); // 4. 获取根节点 Element root = document.getDocumentElement(); // 5. 获取子节点、属性节点等 NodeList nodeList = root.getElementsByTagName("节点名称"); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; // 获取子节点等操作 } else if (node.getNodeType() == Node.ATTRIBUTE_NODE) { Attr attribute = (Attr) node; // 获取属性节点等操作 } } ``` 2. 使用dom4j解析XML 使用dom4j解析XML时,需要按照以下步骤进行: ```java // 1. 读取 XML 文件 SAXReader reader = new SAXReader(); Document document = reader.read(new File("xml文件路径")); // 2. 获取根节点 Element root = document.getRootElement(); // 3. 获取子节点、属性节点等 List<Element> nodeList = root.elements("节点名称"); for (Element element : nodeList) { // 获取子节点等操作 List<Attribute> attributeList = element.attributes(); for (Attribute attribute : attributeList) { // 获取属性节点等操作 } } ``` 以上是DOMdom4j解析XML的基本使用方法。需要注意的是,使用DOM解析XML时,由于要将整个XML文档加载到内存中,因此对于大型XML文档,可能会出现内存溢出等问题。而dom4j相对于DOM,提供了更加方便的API和更高效的内存管理方式,因此在解析大型XML文档时,dom4j可能更加适合。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值