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;
}