1 / 10

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

銘傳大學資訊工程學系 王豐緒. 利用 JAVA DOM 進行 DTD 驗證 XML 文件. 為何需要驗證 XML 文件. 資訊系統在處理 XML 文件之前,往往先須確認該文件是否合乎已知的文件架構規範. 訂單. 訂單資料庫. Internet. 服飾下單系統. 電腦訂單處理系統. 訂單. XML 文件. 電腦訂單架構. DTD 文件. 如何指定 XML 文件的驗證來源 ( 一 ). 將 DTD 文件寫在 XML 文件之內 此法方便 XML 文件與 DTD 文件的發展時期,但較不適合於實務的操作 可用 IE 瀏覽器或 XMLSPY 等進行人工驗證

suchin
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 如何指定XML文件的驗證來源(一) • 將DTD文件寫在XML文件之內 • 此法方便XML文件與DTD文件的發展時期,但較不適合於實務的操作 • 可用IE瀏覽器或XMLSPY等進行人工驗證 • 可用JAVADOM 進行自動驗證 <?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等進行驗證 • 可用JAVADOM 進行自動驗證 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文件的驗證來源(三) • 在執行時期利用JAVADOM指定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) public void ValidateXMLDoc() { try { //1. 產生DocumentBuilderFactory物件 DocumentBuilderFactorydfactory= DocumentBuilderFactory.newInstance(); dfactory.setValidating(true); //啟動validating處理機制 //2. 產生DocumentBuilder物件 DocumentBuilderblder = dfactory.newDocumentBuilder() ; //3. parse XML文件 Document doc=blder.parse(new File (“XXXX.xml") ); //掃描錯誤會丟出錯誤 System.out.println("XML 文件驗證成功!"); } catch ( SAXParseExceptione ) { System.err.println( "Parse error: " + e.getMessage() ); System.exit( 1 ); } catch ( SAXExceptione ) { System.err.println( "Other Parse error: " + e.getMessage() ); System.exit( 1 ); } catch ( FileNotFoundExceptione ) { System.err.println( "File not found. " ); System.exit( 1 ); } 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() ); throw e; } // 處理警告訊息 public void warning( SAXParseException e ) throws SAXParseException { System.err.println( "Warning intercepted by Your Error Handler: " + e.getMessage() ); throw e; } } //2. 產生DocumentBuilder物件 DocumentBuilderblder = dfactory.newDocumentBuilder() ; //自己的錯誤處理類別程式 blder.setErrorHandler(new YourErrorHandler() ) ;

  8. JAVA程式(二) • 當XML文件不含任何DTD的相關資訊時 Public void doValidate() { try{ DocumentBuilderFactoryfactory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); DocumentBuilderbuilder = factory.newDocumentBuilder(); //先載入XML文件 Document xmlDocument = builder.parse(new FileInputStream("XXXX.xml")); //準備動作 DOMSourcesource = new DOMSource(xmlDocument); StreamResultresult = new StreamResult(System.out); //利用Transformer物件進行驗證 TransformerFactorytf= 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範例 • (http://mm.tlrc.mcu.edu.tw/courses/fhwang/XML/Marterial/Appendix_JAVAServlet/Samples/Sample1/Hello.java) • (http://mm.tlrc.mcu.edu.tw/courses/fhwang/XML/Marterial/Appendix_JAVAServlet/Samples/Sample1/Sample1.rar) • JAVA1程式範例 • http://moodle-06.mcu.edu.tw/mod/resource/view.php?id=11898 • JAVA2程式範例 • http://moodle-06.mcu.edu.tw/mod/resource/view.php?id=11897

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

More Related