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

Slides:



Advertisements
Similar presentations
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
Advertisements

DOC 推廣活動 月餅星光大道. 中秋  農曆八月十五日,是中國傳統的中秋節。 古人將一年分成春夏秋冬四季,而一季又 分為孟、仲、季三月,八月是仲秋之月, 而十五又是這個月中間的一天,正處在秋 季的正中,所以把八月十五稱為「中秋」 或「仲秋」。  中秋夜,月亮最圓,月色最美,因此人們 把月圓看成是團圓的象徵,同時也稱八月.
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
中 五 級中 五 級 戰後國共關係 與 中華人民共和國成立 中國歷史科 1 )認識國共政治協商的概況 2 )認識國共內戰的概略經過及結果 3 )中華人民共和國成立.
不吃早餐的影響: 體內的葡萄糖無法 足夠供應給大腦與 肌肉,會感覺疲勞, 注意力無法集中。。 營養的早餐:乳品 + 全榖類食品 + 蛋白質 + 水果 早餐你吃了嗎?
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
以XML可延伸式標注語言建立文章標誌系統研究- 以蘇軾詩為範圍
初审及流程管理部数据处 咨询电话: 、 电子申请的应用 备注 初审及流程管理部数据处 咨询电话: 、
人文地理專題研究 王志明.
2014年爱婴医院复核方案解读 省卫生计生委妇幼处 邱灵.
导言 第四 单元 凡尔赛—华盛顿体系与第二次世界大战
C语言程序设计 李伟光.
社團經費申請 及核銷相關規定 製作:世新大學會計室.
会计实验.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
“卓越工程师”培养的质量保障体系构建探索
恒泰期货研究所2016年 期债暴跌告一段落,短期波动降低 国债期货周报
土地出让转让的政策与实务 岳晓武 国土资源部利用司.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
通訊科技教育改進計畫 「網路應用與服務組」 行動電子商務課程 XML之簡介.
老師:鍾郁芬 老師 指導 組長:陳欣怡 組員:曾郁雯 倪敏富 王宣化 簡宏倫 黃郁涵
數位芝麻網路公司( 軟體工程師
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
MVC Servlet与MVC设计模式.
公文/檔案管理作業流程 簡 報 總務處 文書組 報告人:田至琴 9 7 年3 月7 日 1 1.
第二章 JAVA语言基础.
AOP实践 演讲人:陈思荣.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
程式設計實作.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
例外處理(Exception Handling)
第15章 使用定制组件 使用定制组件是在Flex提供的组件基础上创建自定义的组件模块。虽然Flex内置了大量的组件以满足不同应用的需求,但是这些组件只是用户界面中较为常见的元素。在大型的或者复杂的应用中,往往需要将这些基本元素组合,组成新的模块单元使用。对于这种情况,Flex提供了自定义组件的功能。本章主要介绍如何使用Flex编程语言创建自定义组件。
Java基础 JavaSE异常.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
Chapter 9 設計的精細製作: 行動計算 Software Engineering – An Engineering Approach, James F. Peters & Witold Pedrycz.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
开发Eclipse插件的基本步骤 插件通过添加到预定义的扩展点来向平台添加功能。要将程序代码变成插件,需要: 决定插件如何与平台集成
程式設計實作.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
软件建模训练(6-2) 设计模式 张静 南京理工大学计算机科学与工程学院.
Java语言程序设计 第五部分 Java异常处理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
辅导课程九.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
正荣集团企业门户 基本流程培训
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
简单工厂模式.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Ajax编程技术 第六章 调试与错误处理.
第 15 章 SAX程式設計.
第十二章 过滤器.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
單元3-1: DOM簡介(Part-I) 王豐緒 銘傳大學資工系.
第二章 Java语法基础.
研究生出国申请流程 学生使用手册.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
第15章 SAX2建立XML應用程式 15-1 SAX2的基礎 15-2 使用VB建立SAX應用程式 15-3 應用實例:顯示XML文件
方格紙上畫正方形.
第2章 Java语言基础.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
西南科技大学网络教育系列课程 动态网页设计(JSP) 补充 JSP操作XML文件.
Presentation transcript:

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

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

如何指定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 文件

如何指定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

如何指定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 文件

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.*;

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() ) ;

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.*;

實際操作 在Tomcat下佈署可以驗證XML文件架構的實例 請參閱線上教材: JavaServelt附錄之Hello範例 JAVA1程式範例 (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

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