dom4j解析xml

 1 import java.io.File;  
 2 import java.io.FileInputStream;  
 3 import java.io.InputStream;  
 4 import java.util.Iterator;  
 5 import java.util.List;  
 6   
 7 import org.dom4j.Document;  
 8 import org.dom4j.DocumentHelper;  
 9 import org.dom4j.Element;  
10 import org.dom4j.io.SAXReader;  
11   
12 /** 
13  * 使用dom4j解析xml文档 
14  * @author Administrator 
15  * 
16  */  
17 public class Dom4jParseXmlDemo {  
18       
19     public void parseXml01(){  
20         try{  
21             //将src下面的xml转换为输入流  
22             InputStream inputStream = new FileInputStream(new File("D:/project/dynamicWeb/src/resource/module01.xml"));   
23             //InputStream inputStream = this.getClass().getResourceAsStream("/module01.xml");//也可以根据类的编译文件相对路径去找xml  
24             //创建SAXReader读取器,专门用于读取xml  
25             SAXReader saxReader = new SAXReader();  
26             //根据saxReader的read重写方法可知,既可以通过inputStream输入流来读取,也可以通过file对象来读取   
27             //Document document = saxReader.read(inputStream);    
28             Document document = saxReader.read(new File("D:/project/dynamicWeb/src/resource/module01.xml"));//必须指定文件的绝对路径  
29             //另外还可以使用DocumentHelper提供的xml转换器也是可以的。  
30             //Document document = DocumentHelper.parseText("<?xml version="1.0" encoding="UTF-8"?><modules id="123"><module> 这个是module标签的文本信息</module></modules>");  
31               
32             //获取根节点对象  
33             Element rootElement = document.getRootElement();    
34             System.out.println("根节点名称:" + rootElement.getName());//获取节点的名称  
35             System.out.println("根节点有多少属性:" + rootElement.attributeCount());//获取节点属性数目  
36             System.out.println("根节点id属性的值:" + rootElement.attributeValue("id"));//获取节点的属性id的值  
37             System.out.println("根节点内文本:" + rootElement.getText());//如果元素有子节点则返回空字符串,否则返回节点内的文本  
38             //rootElement.getText() 之所以会换行是因为 标签与标签之间使用了tab键和换行符布局,这个也算是文本所以显示出来换行的效果。  
39             System.out.println("根节点内文本(1):" + rootElement.getTextTrim());//去掉的是标签与标签之间的tab键和换行符等等,不是内容前后的空格  
40             System.out.println("根节点子节点文本内容:" + rootElement.getStringValue()); //返回当前节点递归所有子节点的文本信息。  
41               
42             //获取子节点  
43             Element element = rootElement.element("module");  
44             if(element != null){  
45                 System.out.println("子节点的文本:" + element.getText());//因为子节点和根节点都是Element对象所以它们的操作方式都是相同的  
46             }  
47             //但是有些情况xml比较复杂,规范不统一,某个节点不存在直接java.lang.NullPointerException,所以获取到element对象之后要先判断一下是否为空  
48               
49             rootElement.setName("root");//支持修改节点名称  
50             System.out.println("根节点修改之后的名称:" + rootElement.getName());  
51             rootElement.setText("text"); //同样修改标签内的文本也一样  
52             System.out.println("根节点修改之后的文本:" + rootElement.getText());  
53         } catch (Exception e) {    
54             e.printStackTrace();    
55         }    
56     }  
57       
58     public static void main(String[] args) {  
59         Dom4jParseXmlDemo demo = new Dom4jParseXmlDemo();  
60         demo.parseXml01();  
61     }  
62 }  

api使用比较全。

生成xml文件:

 1 import java.io.FileWriter;  
 2 import java.io.IOException;  
 3 import java.io.Writer;  
 4   
 5 import org.dom4j.Document;  
 6 import org.dom4j.DocumentHelper;  
 7 import org.dom4j.Element;  
 8 import org.dom4j.io.XMLWriter;  
 9   
10 /** 
11  * 使用dom4j生成xml文档 
12  * @author Administrator 
13  * 
14  */  
15 public class Dom4jBuildXmlDemo {  
16     public void build01(){  
17         try {  
18             //DocumentHelper提供了创建Document对象的方法  
19             Document document = DocumentHelper.createDocument();  
20             //添加节点信息  
21             Element rootElement = document.addElement("modules");  
22             //这里可以继续添加子节点,也可以指定内容  
23             rootElement.setText("这个是module标签的文本信息");  
24             Element element = rootElement.addElement("module");  
25               
26             Element nameElement = element.addElement("name");  
27             Element valueElement = element.addElement("value");  
28             Element descriptionElement = element.addElement("description");  
29             nameElement.setText("名称");  
30             nameElement.addAttribute("language", "java");//为节点添加属性值  
31             valueElement.setText("值");  
32             valueElement.addAttribute("language", "c#");  
33             descriptionElement.setText("描述");  
34             descriptionElement.addAttribute("language", "sql server");  
35             System.out.println(document.asXML()); //将document文档对象直接转换成字符串输出  
36             Writer fileWriter = new FileWriter("c:\module.xml");  
37             //dom4j提供了专门写入文件的对象XMLWriter  
38             XMLWriter xmlWriter = new XMLWriter(fileWriter);  
39             xmlWriter.write(document);  
40             xmlWriter.flush();  
41             xmlWriter.close();  
42             System.out.println("xml文档添加成功!");  
43         } catch (IOException e) {  
44             e.printStackTrace();  
45         }  
46     }  
47       
48     public static void main(String[] args) {  
49         Dom4jBuildXmlDemo demo = new Dom4jBuildXmlDemo();  
50         demo.build01();  
51     }  
52 }  

自己封装的xml解析方法。

 1 package com.ykse.util;
 2 
 3 import com.ykse.util.cache.XMLCache;
 4 import org.dom4j.Document;
 5 import org.dom4j.DocumentException;
 6 import org.dom4j.Element;
 7 import org.dom4j.io.SAXReader;
 8 
 9 import java.util.ArrayList;
10 
11 /**
12  * Created by A on 2016/11/30.
13  */
14 public class XMLHelper {
15 
16     public static ArrayList<XMLCache> getShowTimeXML()
17     {
18         ArrayList<XMLCache> xmlCacheArrayList = new ArrayList<>();
19         SAXReader sr = new SAXReader();// 获取读取xml的对象。
20         try {
21             Document doc = sr.read("src/main/resources/ShowTime.xml");
22             Element resRoot = doc.getRootElement();
23 
24             for (int i = 0; i < resRoot.elements().size(); i++) {
25                 XMLCache rootElementCache = new XMLCache();
26                 rootElementCache.setCinemaName(((Element) resRoot.elements().get(i)).attributeValue("name"));
27                 rootElementCache.setMcID(((Element) resRoot.elements().get(i)).attributeValue("mcid"));
28                 rootElementCache.setStID(((Element) resRoot.elements().get(i)).attributeValue("stid"));
29                 xmlCacheArrayList.add(rootElementCache);
30 
31             }
32 
33         } catch (DocumentException e) {
34             // TODO Auto-generated catch block
35             e.printStackTrace();
36         }
37         return xmlCacheArrayList;
38 
39     }
40 
41     public static ArrayList<XMLCache> getMCTableXML()
42     {
43         ArrayList<XMLCache> xmlCacheArrayList = new ArrayList<>();
44         SAXReader sr = new SAXReader();// 获取读取xml的对象。
45         try {
46             Document doc = sr.read(Config.HDXML);
47             Element resRoot = doc.getRootElement();
48 
49             for (int i = 0; i < resRoot.elements().size(); i++) {
50                 XMLCache rootElementCache = new XMLCache();
51                 rootElementCache.setCinemaName(((Element) resRoot.elements().get(i)).attributeValue("name"));
52                 rootElementCache.setMcID(((Element) resRoot.elements().get(i)).attributeValue("mcid"));
53                 rootElementCache.setLocalURL(((Element) resRoot.elements().get(i)).attributeValue("localurl"));
54                 rootElementCache.setLocalUrlType(((Element) resRoot.elements().get(i)).attributeValue("localurlType"));
55                 rootElementCache.setPassword(((Element) resRoot.elements().get(i)).attributeValue("password"));
56                 xmlCacheArrayList.add(rootElementCache);
57 
58             }
59 
60         } catch (DocumentException e) {
61             // TODO Auto-generated catch block
62             e.printStackTrace();
63         }
64         return xmlCacheArrayList;
65 
66     }
67 
68 }

示例2:

public static List<GoodsInfo>  getGoodsinfoData() throws DocumentException {
List<GoodsInfo> goodsInfoList = new ArrayList<GoodsInfo>();
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new File("src\main\java\cn\com\ykse\daa\base\goodInfoData.xml"));
Element rootElement = doc.getRootElement();

for(int i=0;i<rootElement.elements("goods").size();i++) {
GoodsInfo goodsInfo = new GoodsInfo();
String goodsId = ((Element) (rootElement.elements("goods").get(i))).element("goodsId").getText();
String goodsPrice = ((Element) (rootElement.elements("goods").get(i))).element("goodsPrice").getText();
goodsInfo.setGoodsId(goodsId);
goodsInfo.setGoodsPrice(goodsPrice);
goodsInfoList.add(goodsInfo);

}
return goodsInfoList;
}
原文地址:https://www.cnblogs.com/zipon/p/6219628.html