目前接觸到的關於xml的主要有方面:html
一、xml做爲項目的配置文件,項目初始化時讀取裏邊的內容。從系統方面考慮,在項目不重啓的狀況下要有修改從新載入配置的功能,此時須要對xml內容進行操做,java
若是是一個大系統須要各個系統之間進行通訊,通知各個服務器進行從新載入。node
二、通訊時傳遞的報文爲xml格式,常見於webservice,此時接收或者傳遞報文時須要和bean相互轉換。web
第一種狀況,最流行的是dom4j,使用方便,代碼簡練,不用再封裝工具類,性能最好。服務器
第二種狀況,能夠使用jaxb解析,封裝一個工具類就能夠實現xml與bean的相互轉化。框架
這裏寫一下dom4j的使用,jaxb使用方法請點擊 jaxb實現xml與bean的相互轉化 。dom
① test.xml工具
<?xml version="1.0" encoding="UTF-8"?> <orgs size="7095" batch_number="20130704110039" errmsg="錯誤信息"> <org> <org_id>16817</org_id> <parent_id>9233</parent_id> <org_name>512AAS.蘇州滄浪區</org_name> <org_code>512AAS</org_code> <org_type>門店部門1</org_type> <start_d>2011-12-28</start_d> <end_d>2011-12-29</end_d> <attribute1></attribute1> <insert_t>2013-7-4 10:32:09</insert_t> </org> <org> <org_id>16818</org_id> <parent_id>9234</parent_id> <org_name>513AAS.蘇州滄浪區</org_name> <org_code>513AAS</org_code> <org_type>門店部門2</org_type> <start_d>2011-12-18</start_d> <end_d>2011-12-19</end_d> <attribute1></attribute1> <insert_t>2013-7-5 10:32:09</insert_t> </org> <org> <org_id>16819</org_id> <parent_id>9235</parent_id> <org_name>514AAS.蘇州滄浪區</org_name> <org_code>514AAS</org_code> <org_type>門店部門3</org_type> <start_d>2011-12-08</start_d> <end_d>2011-12-09</end_d> <attribute1></attribute1> <insert_t>2013-7-6 10:32:09</insert_t> </org> </orgs>
/** * dom4j的代碼已經很簡單易懂了,不須要本身再封裝工具類了 * DOM4J是 dom4j.org 出品的一個開源 XML 解析包。 * DOM4J應用於 Java 平臺,採用了 Java 集合框架並徹底支持 DOM,SAX 和 JAXP。 * @author cxz */ public class dom4j { public static void main(String[] args) { try { //手動建立 Document document = DocumentHelper.createDocument();//建立doc對象 Element roott = document.addElement("csdn");//建立csdn根節點 //讀取xml文件爲doc對象 String path = "D:\\test.xml"; File file = new File(path); SAXReader reader = new SAXReader(); Document doc = reader.read(file); //將整個xml轉換爲string String testxml = doc.asXML(); //將String轉換爲doc對象 doc = DocumentHelper.parseText(testxml); //讀取根節點 Element root = doc.getRootElement(); //讀取此節點下的子節點 Element org=root.element("org"); Element orgId = org.element("org_id"); //沒有子節點的節點才能讀取到text String s = orgId.getText(); System.out.println(s); //讀取某節點下全部的名字爲**的子節點,遍歷 List<Element> nodes = root.elements("org"); for(Element e : nodes){ Element orgid = e.element("org_id"); System.out.println(orgid.getText()); } //讀取某節點下的全部子節點 List<Element> es = root.elements();//獲得5個orgs //在某節點下添加子節點 Element elm = root.addElement("朝代"); //設置節點文字 elm.setText("明朝"); //刪除某節點 //childElement是待刪除的節點,parentElement是其父節點 root.remove(org); //添加一個CDATA節點 Element contentElm = root.addElement("content"); contentElm.addCDATA("cdata區域"); //獲取節點屬性 Attribute attribute=root.attribute("batch_number"); String batch_number = attribute.getText(); //刪除某屬性 Attribute attribute1=root.attribute("errmsg"); root.remove(attribute1); //遍歷節點屬性值 for(Iterator it=root.attributeIterator();it.hasNext();){ Attribute attribute2 = (Attribute) it.next(); String text=attribute2.getText(); System.out.println(text); } //寫入xml //無中文 XMLWriter writer = new XMLWriter(new FileWriter("ot.xml")); writer.write(document); writer.close(); //有中文 // 緊湊的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 縮緊格式 OutputFormat format = OutputFormat.createPrettyPrint();// 建立文件輸出的時候,自動縮進的格式 format.setEncoding("UTF-8");//設置編碼 // XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format); XMLWriter xmlwriter = new XMLWriter(new OutputStreamWriter( new FileOutputStream(new File("src//a.xml")), "UTF-8"), format); xmlwriter.write(document); xmlwriter.flush(); xmlwriter.close(); } catch (Exception e) { e.printStackTrace(); } } }
項目中的實際運用,項目啓動類中的初始化xmlpost
這裏有一個獲取jar包路徑的工具類,以下:性能
/** * 路徑通用類 * @author 李冬 * 說明: */ public class JarUtil { private String jarName; private String jarPath; public JarUtil(Class<?> clazz) { //獲這個文件到他的bin路徑 String path = clazz.getProtectionDomain().getCodeSource().getLocation().getFile(); try { path = java.net.URLDecoder.decode(path, "UTF-8"); } catch (java.io.UnsupportedEncodingException e) { e.printStackTrace(); } java.io.File jarFile = new java.io.File(path); this.jarName = jarFile.getName(); java.io.File parent = jarFile.getParentFile(); if (parent != null) { this.jarPath = parent.getAbsolutePath(); } } /** * 獲取Class類所在Jar包的名稱 * * @return Jar包名 (例如:C:\temp\demo.jar 則返回 demo.jar ) */ public String getJarName() { try { return java.net.URLDecoder.decode(this.jarName, "UTF-8"); } catch (java.io.UnsupportedEncodingException e) { e.printStackTrace(); } return null; } /** * 取得Class類所在的Jar包路徑 * * @return 返回一個路徑 (例如:C:\temp\demo.jar 則返回 C:\temp ) */ public String getJarPath() { try { return java.net.URLDecoder.decode(this.jarPath, "UTF-8"); } catch (java.io.UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { JarUtil ju = new JarUtil(JarUtil.class); System.out.println("Jar name: " + ju.getJarName()); System.out.println("Jar path: " + ju.getJarPath()); } }
public void initConf() throws Exception { logger.info(">>>配置系統信息...開始讀取配置文件setting.xml"); JarUtil pathUtil = new JarUtil(this.getClass()); String path = pathUtil.getJarPath(); File url = new File(path + File.separator + "setting.xml"); Element root = null; Document doc = null; SAXReader xmlReader = new SAXReader(); try { doc = xmlReader.read(url); } catch (Exception ex) { logger.info("setting.xml" + "不是合法的配置文件", ex); throw ex; } logger.info(">>>配置系統信息...讀取配置文件setting.xml完畢....開始分析配置文件信息"); root = doc.getRootElement(); ...... }
來波連接
Java解析xml的四種經典方法 詳解Java解析XML的四種方法—DOM/SAX/jdom/dom4j XML解析——Java中XML的四種解析方式