Presentation is loading. Please wait.

Presentation is loading. Please wait.

利用JAVA DOM 進行DTD驗證XML文件

Similar presentations


Presentation on theme: "利用JAVA DOM 進行DTD驗證XML文件"— Presentation transcript:

1 利用JAVA DOM 進行DTD驗證XML文件
銘傳大學資訊工程學系 王豐緒 利用JAVA DOM 進行DTD驗證XML文件

2 為何需要驗證XML文件 資訊系統在處理XML文件之前,往往先須確認該文件是否合乎已知的文件架構規範 訂單 服飾下單系統 訂單資料庫
Internet 服飾下單系統 電腦訂單處理系統 訂單 XML文件 電腦訂單架構 DTD文件

3 如何指定XML文件的驗證來源(一) 將DTD文件寫在XML文件之內 此法方便XML文件與DTD文件的發展時期,但較不適合於實務的操作
可用IE瀏覽器或XMLSPY等進行人工驗證 可用JAVA DOM 進行自動驗證 <?xml version=“1.0” > <!DOCTYPE order [ <!ELEMENT order (customer, product*,date_time) > …… ]> <order> <customer> ….</customer> <product> …. </product> <date_time> …. </date_time> </order> JAVA程式 XML 文件

4 如何指定XML文件的驗證來源(二) 獨立撰寫DTD文件 此法較適合於實務的操作 可用IE瀏覽器或XMLSPY等進行驗證
可用JAVA DOM 進行自動驗證 XML文件 <?xml version=“1.0” > <!DOCTYPE order SYSTEM “order.dtd” > <order> <customer> ….</customer> <product> …. </product> <date_time> …. </date_time> </order> JAVA程式 <!ELEMENT order (customer, product*,date_time) > …… DTD文件: order.dtd

5 如何指定XML文件的驗證來源(三) 在執行時期利用JAVA DOM指定DTD文件 此法最適合於實務的操作 JAVA程式
<?xml version=“1.0” > <order> <customer> ….</customer> <product> …. </product> <date_time> …. </date_time> </order> <!ELEMENT order (customer, product*,date_time) > …… DTD文件: order.dtd XML 文件

6 JAVA程式(一) 當XML文件內含DTD的相關資訊時(不管是內部DTD還是外部DTD) import org.w3c.dom.*;
public void ValidateXMLDoc() { try { //1. 產生DocumentBuilderFactory物件 DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); dfactory.setValidating(true); //啟動validating處理機制 //2. 產生DocumentBuilder物件 DocumentBuilder blder = dfactory.newDocumentBuilder() ; //3. parse XML文件 Document doc = blder.parse(new File (“XXXX.xml") ); //掃描錯誤會丟出錯誤 System.out.println("XML 文件驗證成功!"); } catch ( SAXParseException e ) { System.err.println( "Parse error: " + e.getMessage() ); System.exit( 1 ); catch ( SAXException e ) { System.err.println( "Other Parse error: " + e.getMessage() ); catch ( FileNotFoundException e ) { System.err.println( "File not found. " ); catch ( Exception e ) { e.printStackTrace(); import org.w3c.dom.*; import javax.xml.parsers.*; import org.xml.sax.*;

7 JAVA程式(一)(續) 捕捉剖析過程中的錯誤 利用自己的錯誤處理程式 import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class YourErrorHandler implements ErrorHandler { // 處理致命錯誤 public void fatalError( SAXParseException e ) throws SAXException System.err.println( "Fatal Error intercepted by Your Error Handler: " + e.getMessage() ); throw e; } // 處理一般錯誤 public void error( SAXParseException e ) throws SAXParseException System.err.println( "Common Error intercepted by Your Error Handler: " + e.getMessage() ); // 處理警告訊息 public void warning( SAXParseException e ) System.err.println( "Warning intercepted by Your Error Handler: " + e.getMessage() ); //2. 產生DocumentBuilder物件 DocumentBuilder blder = dfactory.newDocumentBuilder() ; //自己的錯誤處理類別程式 blder.setErrorHandler(new YourErrorHandler() ) ;

8 JAVA程式(二) 當XML文件不含任何DTD的相關資訊時 Public void doValidate() { try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); DocumentBuilder builder = factory.newDocumentBuilder(); //先載入XML文件 Document xmlDocument = builder.parse(new FileInputStream("XXXX.xml")); //準備動作 DOMSource source = new DOMSource(xmlDocument); StreamResult result = new StreamResult(System.out); //利用Transformer物件進行驗證 TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "YYYY.dtd"); transformer.transform(source, result); } catch (Exception e) { System.out.println(e.getMessage()); import org.w3c.dom.*; import org.xml.sax.*; import javax.xml.parsers.*; import javax.xml.validation.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.*;

9 實際操作 在Tomcat下佈署可以驗證XML文件架構的實例 請參閱線上教材: JavaServelt附錄之Hello範例 JAVA1程式範例
( ) ( ) JAVA1程式範例 JAVA2程式範例

10 示範(一) 步驟一:修改Hello.java成為ValidateDTD.java 步驟二:佈署ValidateDTD.java
沿用其HttpServlet架構 加入驗證XML的程式碼 步驟二:佈署ValidateDTD.java 包括修改web.xml檔案, 新增Validate功能 步驟三:修改Hello.htm成為Validate.htm 讓使用者可以透過網頁要求進行驗證動作 步驟四:測試系統


Download ppt "利用JAVA DOM 進行DTD驗證XML文件"

Similar presentations


Ads by Google