標籤:調用 常用方法 命名 定義 doctype 開頭 win utf-8 ora
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 @Override12 public void b() {13 System.out.println("青年");14 15 }16 17 @Override18 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 }
控制台:
java xml設定檔