XML
類似於properties的配置文件,全名是Extensible Markup Language,意思是可擴展的標記語言。XML語法上和HTML比較相似,但HTML中的元素是固定的,而XML的標簽是可以由用戶自定義的
語法:文檔聲明必須以<?xml開頭,以?>結尾
文檔是聲明必須是0行0列
3.文檔聲明只有屬性:
a) versioin:指定XML文檔版本。必須屬性,因為我們不會選擇1.1,只會選擇1.0;
b) encoding:指定當前文檔的編碼。可選屬性,默認值是。utf-8
xml有2種規范,一種DTD,一種是Schema
DTD:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> //把DTD規范放到同一個包下,然后把這句話放到自己的xml文件里,標簽必須是成對的 3 <web-app> 4 <servlet> 5 <servlet-name>MyServer</servlet-name> 6 <servlet-class>com.oracle.demo03.person</servlet-class> 這里寫要操作類的路徑 7 </servlet> 8 <servlet-mapping> 9 <servlet-name>MyServer</servlet-name> 10 <url-pattern>/hello</url-pattern> 11 </servlet-mapping> 12 </web-app>
Scheam比DTD更強大,文件的擴展名是xsd,支持命名空間
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://www.example.org/web-app_2_5" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" 5 version="2.5"> 6 <servlet> 7 <servlet-name></servlet-name> 8 <servlet-class></servlet-class> 9 </servlet> 10 <servlet-mapping> 11 <servlet-name></servlet-name> 12 <url-pattern></url-pattern> 13 </servlet-mapping> 14 </web-app>
用法和DTD差不多
XML解析
1.通過解析器把xml文件裝到內存里,成為ocmenent對象來獲取元素,優點是元素元素之間有關系,可以增刪改查,缺點如果xml文件過大,可能是會內存溢出
2.SAX是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。並以事件 驅動的方式進行具體解析,每執行一行,都將觸發對應的事件。
3.PULL: Android內置的XML解析方式
l 常見的解析開發包:
n JAXP: sun公司提供支持DOM和SAX開發包
n JDom:dom4j兄弟
n jsoup:一種處理HTML特定解析開發包
n dom4j:比較常用的解析開發包,hibernate底層采用。,在這里我們用deom4j
解析:

dom4j的常用方法:

直接來練習題操作嗎,定義一個接口,再來個接口的實現類,然后寫個xml文件,然后通過xml文件來調用該接口實現類的方法
1 package com.oracle.demo04; 2 3 public interface Person { //接口 4 public void a(); 5 public void b(); 6 public void c(); 7 }
1 package com.oracle.demo04; 2 3 public class PersonS implements Person{ 4 //接口實現類 5 @Override 6 public void a() { 7 System.out.println("出生"); 8 9 } 10 11 @Override 12 public void b() { 13 System.out.println("青年"); 14 15 } 16 17 @Override 18 public void c() { 19 System.out.println("愛你到老"); 20 21 } 22 } 23
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://www.example.org/web-app_2_5" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" 5 version="2.5"> 6 <servlet> 7 <servlet-name>MyServer</servlet-name> 8 <servlet-class>com.oracle.demo04.PersonS</servlet-class> 這里寫要讀取實現類的路徑 9 </servlet> 10 <servlet-mapping> 11 <servlet-name>MyServer</servlet-name> 12 <url-pattern>/hello</url-pattern> 13 </servlet-mapping> 14 </web-app>
1 package com.oracle.demo04; 2 3 import java.lang.reflect.Method; 4 5 import org.dom4j.Document; 6 import org.dom4j.DocumentException; 7 import org.dom4j.Element; 8 import org.dom4j.io.SAXReader; 9 10 public class Test { 11 12 public static void main(String[] args) throws Exception { 13 //創建解析器 14 SAXReader sa = new SAXReader(); 15 //此處寫要讀取xml文件的路徑 16 Document doc = sa.read("src/com/oracle/demo04/WebDtd.xml"); 寫要讀取的xml文件路徑 17 //獲取根元素<web-app> 18 Element el = doc.getRootElement(); 19 //獲取根元素下的指定的子元素 20 Element em = el.element("servlet"); 21 //獲取server下的子元素 22 String servletclass = em.elementText("servlet-class"); 23 //獲取后再根據獲取到的xml元素來獲取字節碼對象 24 Class c = Class.forName(servletclass); 25 //創建一個對象,然后通過字節碼對象來過去該類的方法 26 Object obj = c.newInstance(); 27 Method a = c.getMethod("a"); 28 Method b = c.getMethod("b"); 29 Method c1 = c.getMethod("c"); 30 //調用方法 31 a.invoke(obj); 32 b.invoke(obj); 33 c1.invoke(obj); 34 要注意,xml的路徑一定要寫對,創建doc對象讀取的路徑也要寫對 35 36 37 38 39 40 } 41 42 }
控制台:

