數位芝麻網路公司(www.d11e.com) 軟體工程師

Slides:



Advertisements
Similar presentations
1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
Advertisements

第 12 章 SOAP技術.
四資二甲 第三週作業 物件導向程式設計.
Java Programming Hygiene - for DIDC
MVC Servlet与MVC设计模式.
J2EE Struts 和Spring 的区别.
第三章 使用XMLHttpRequest对象
第 5 章 流程控制 (一): 條件分支.
程設一.
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
第八章 分析與設計階段 – 物件導向設計(OOD)
第三章 控制结构.
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
API设计实例分析 通用IO API.
XML資料傳輸 黃笠宸 4/3.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
例外處理(Exception Handling)
王耀聰 陳威宇 國家高速網路與計算中心(NCHC)
Basis基本操作、使用者 管理與權限設定
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
Java基础 JavaSE异常.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
胡鹏 王慧锋 TEL: 数据库系统原理课程设计 实验环节1 胡鹏 王慧锋 TEL:
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第 7 章 陣列 (Array).
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
软件建模训练(6-2) 设计模式 张静 南京理工大学计算机科学与工程学院.
JUNO数据模型设计和相关软件开发 李腾 黄性涛 山东大学 合肥 2018/12/2.
Java语言程序设计 第五部分 Java异常处理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第7章 Web伺服器檔案與XML文件的處理 7-1 System.IO名稱空間的基礎 7-2 伺服器的資料夾與檔案操作
第8章 Service解析.
資料庫管理(Access 2003) 第五章 利用查詢來 統計與分析資料 許欽嘉 老師.
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
Spark SQL 介绍 付士涛. Spark SQL 介绍 付士涛 大纲 Architecture(架构) 像Hive一样的User Interface(用户操作界面) DataFrame的使用(1.3以前叫做SchemaRDD)
简单工厂模式.
Multithread 多執行緒 以GUI為例了解物件以及Event
第五讲 酒店客房管理系统(一) 教育部“十二五”职业教育国家规划教材
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第 15 章 SAX程式設計.
潘爱民 C++ Overview 潘爱民
补充:c#语言基础.
SOA模型设计 杨子 2009/09/30.
利用JAVA DOM 進行DTD驗證XML文件
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.

#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
Chapter 14 系統保護 (System Protection)
第15章 SAX2建立XML應用程式 15-1 SAX2的基礎 15-2 使用VB建立SAX應用程式 15-3 應用實例:顯示XML文件
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
第2章 Java语言基础.
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
西南科技大学网络教育系列课程 动态网页设计(JSP) 补充 JSP操作XML文件.
Presentation transcript:

數位芝麻網路公司(www.d11e.com) 軟體工程師 陳威誌(cwc@d11e.com) Java Access XML 數位芝麻網路公司(www.d11e.com) 軟體工程師 陳威誌(cwc@d11e.com)

課程目的 瞭解DOM (Document Object Model)、SAX(The Simple API for XML)及Xerces、Castor等API,並以 JAVA 處理 XML 文件,實作如何存、取及動態產生XML文件內容。

議題 前言 DOM SAX Xerces-J 實作 Castor

前言 學習JAVA及 XML,我們會有一個理想,也就是藉由 JAVA跨平台及XML不受程式語言及資料庫類別的限制的特性達到 JAVA + XML = Portable Code + Portable Data 要達到這樣的目的,我們必須有一些工具可以幫助我們有效的處理 XML 的文件,這也就是今天研習的主要議題。

DOM 及 SAX 簡述 W3C 定義了 DOM (Document Object Model) 的標準,並定義了一組API (目前只有 Interface),讓大家在處理XML時,有一個共同的標準。於是各家( 如 IBM、SUN… 等)有心發展XML Parser 的廠商、組織,便可以執基於這一個標準,以實作 DOM 的 Interface 來發展符合 DOM 規範的 XML Parser。W3C的著眼點在於標準的建立。 相對於 DOM,SAX 是由一群對XML事務有興趣的人,為了解決處理XML文件的需求,自行發展出一組API,它本身已有實作部份的類別(Class)。同時SAX處理XML文件確有其異於DOM的優點存在,因此也有許多組織實作SAX的Interface來繼續發展更方便XML Parser。

DOM (Document Object Model) What is the Document Object Model? The Document Object Model is a platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, structure and style of documents. The document can be further processed and the results of that processing can be incorporated back into the presented page. (http://www.w3.org/DOM/)

DOM (Document Object Model) <TABLE> <TBODY> <TR> <TD>Shady Grove</TD> <TD>Aeolian</TD> </TR> <TD>Over the River, Charlie</TD> <TD>Dorian</TD> </TBODY> </TABLE> 圖文出處:http://w3c.org/

DOM API Overview 執基於樹狀模型(tree model),提供對於XML文件的隨機式(random)存取 ,並且能夠動態修改文件的內容。 API JavaDoc Overview 舉例說明

DOM API 應用實例 DOMParser parser = new DOMParser(); try { //處理傳入的XML文件(uri) parser.parse(uri); //取得整份文件(已經是 dom tree 的形式) Document doc = parser.getDocument(); //將文件中的每一個節點印出來 printNode(doc, ""); } catch (IOException e) { System.out.println("Error reading URI: " + e.getMessage()); } catch (SAXException e) { System.out.println("Error in parsing: " + e.getMessage()); }

DOM API 應用實例 public void printNode(Node node, String indent) { // Determine action based on node type switch (node.getNodeType()) { case Node.DOCUMENT_NODE: System.out.println("<xml version=\"1.0\">\n"); // recurse on each child NodeList nodes = node.getChildNodes(); if (nodes != null) { for (int i=0; i<nodes.getLength(); i++) { printNode(nodes.item(i), ""); } break;

DOM API 應用實例 printNode(children.item(i), indent + " "); } case Node.ELEMENT_NODE: String name = node.getNodeName(); System.out.print(indent + "<" + name); : System.out.println(">"); NodeList children = node.getChildNodes(); if (children != null) { for (int i=0; i<children.getLength(); i++) { printNode(children.item(i), indent + " "); } System.out.println(indent + "</" + name + ">"); break;

SAX (The Simple API for XML) 由XML-DEV mailing list的成員共同發展。 提供一個事件導向(event-based)的架構來對XML文件做循序式(sequential)的存取。 API JavaDoc Overview 舉例說明

SAX (The Simple API for XML) 圖文出處:htthttp://www.developerlife.com

SAX (The Simple API for XML) http://industry.ebi.ac.uk/~senger/xml/docs/tutorial/overview/3_apis.html

SAX API 應用實例 ContentHandler contentHandler = new MyContentHandler(); try { // Instantiate a parser XMLReader parser = XMLReaderFactory.createXMLReader (“org.apache.xerces.parsers.SAXParser"); // Register the content handler parser.setContentHandler(contentHandler); // Parse the document parser.parse(uri); } catch (IOException e) { System.out.println("Error reading URI: " + e.getMessage()); } catch (SAXException e) { System.out.println("Error in parsing: " + e.getMessage()); }

SAX API 應用實例 String rawName, Attributes atts) throw SAXException { class MyContentHandler implements ContentHandler { public void startDocument() throws SAXException {class MyContentHandler implements ContentHandler { System.out.println(" begins..."); } public void endDocument() throws SAXException { System.out.println("...Parsing ends."); : public void startElement(String amespaceURI,StringlocalName, String rawName, Attributes atts) throw SAXException { System.out.print("startElement: " + localName);

SAX VS.DOM DOM 將整份文件化為樹狀結構存於暫存區域 中,可以作隨機的存取,並且效率也較循序 中,當XML文件過大時,系統資源的耗費可 想而知。因此在取捨SAX與DOM時,效率與系 統資源的平衡是一個關鍵。

Xerces-J API Apache XML Project的一部份 API Overvie 實作:我們會有一份記錄電腦訂單資料的XML文件,包含客戶姓名「NAME」、 「CPU」、 「RAM」三個欄位。我們將利用Xerces-J中的DOM Parser來新增一位客戶的資料,並用SAX Paser來計算這份文件中共有幾位客戶。 (http://xml.apache.org)

Xerces-J 實例練習 <CWC> ------------  Element(Node) <CPU> --------  Element(Node) INTEL ----  Text(Node) </CPU> <RAM> --------  Element(Node) 64 -------  Text(Node) </RAM> </CWC>

Castor API 簡介 由 Exolab group(www.exolab.org)所發展的一個 open source 的 porject。 目的在提供一個簡便的方法,來處理 Java[tm] objects, XML documents, SQL tables 和 LDAP directories 之間的轉換與互動。

Castor API Overview

Castor API -- Using XML 1.Generate source code from an XML Schema (org.exolab.castor.builder.SourceGenerator in castor.jar) 2.Marshalling and Unmarshalling

Castor Source Code Generator 會以xml schema定義的資料結構來產生一組 Java classes,同時產生 Class Descriptors,對於產生的class 提供 marshalling framework 必須參考到 的一些資訊。

Castor Source Code Generator

Castor 實例練習 在這個練習中,我們會以 Castor 將一個XML Schema (Article.xsd) generate出一組Java Code,這組自動產生的Java Code即包含處理 這個 XML document 的資料所需的一些基本的 Method,再以這些自動產生的物件來讀取 XML document (unmarshalling),並在修改資料後 產生一個新的XML File (marshalling)。

總結 JAVA 與 XML 的應用非常廣泛,以上所研討的部份,可以實際應用於各種跨平台、跨資料庫的系統間的整合,以及動態文件的產生。 Q & A

取得更多的相關資訊 BOOK:java and xml -- Brett McLaughlin,O'REILLY http://www.w3.org http://www.megginson.com/SAX http://www.xml.org http://xml.apache.org http://castor.exolab.org