zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    理解vue数据驱动
    深入理解vue的watch
    Vue如何用虚拟dom进行渲染view的
    小程序开发-自定义组件的扩展
    让微信小程序页面之间的通信不在变得困难
    借鉴redux,实现一个react状态管理方案
    Vue的computed计算属性是如何实现的
    读redux有感: redux原来是这样操作的。
    web前端面试题记录
    前端知识理解的笔记
  • 原文地址:https://www.cnblogs.com/zipon/p/6219628.html
Copyright © 2011-2022 走看看