XML基礎(chǔ)_ Java解析XML 一、XML基礎(chǔ) 1.1、 XML是什么? XML (可擴(kuò)展標(biāo)記語言)是一種很流行的簡單的基于文本的語言來用作應(yīng)用程序之間的通信模式。 它被認(rèn)為是傳輸標(biāo)準(zhǔn)裝置和存儲數(shù)據(jù)。JAVA提供了極好的支持和豐富的庫來解析,修改或查詢XML文檔。 XML是一種簡單的基于文本的語言,它被設(shè)計為儲存和運(yùn)輸以純文本格式的數(shù)據(jù)。它代表著可擴(kuò)展標(biāo)記語言。以下是一些XML的顯著 特征。 XML是一種標(biāo)記語言。 XML是一種標(biāo)記語言就像HTML-樣。 XML標(biāo)簽不是像HTML那樣預(yù)定義。 可以定義自己的標(biāo)簽,這就是為什么它被稱為可擴(kuò)展的語言。 XML標(biāo)簽被設(shè)計成自描述性的。 XML是W3C推薦用于數(shù)據(jù)存儲和傳輸。 1.2、XML能干什么? 描述數(shù)據(jù)、存儲數(shù)據(jù)、傳輸(交換)數(shù)據(jù)。 優(yōu)缺點(diǎn): 優(yōu)勢 以下是XML提供的優(yōu)勢: 技術(shù)無關(guān).作為普通文本,XML是技術(shù)獨(dú)立。它可以用于由任何技術(shù)進(jìn)行數(shù)據(jù)的存儲和傳輸?shù)哪康摹?人類可讀. XML使用簡單的文本格式。它是人類可讀和可以理解的。
為靈壽等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及靈壽網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計、做網(wǎng)站、靈壽網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!可擴(kuò)展性-在XML,自定義標(biāo)簽可以創(chuàng)建和很容易使用。 允許驗(yàn)證-使用XSD,DTD和XML結(jié)構(gòu)可以很容易地驗(yàn)證。 缺點(diǎn) 下面是使用XML的缺點(diǎn): 冗余的語法-通常XML文件中包含大量的重復(fù)計算。 冗余-作為一個冗長的語言,XML文件大小增加了傳輸和存儲成本。 1.3、 XML與HTML區(qū)別 1、目的不- -樣 2、XML被設(shè)計用來描述數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。 3、HTML被設(shè)計用來展示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。 4、HTML可以不關(guān)閉標(biāo)簽(即標(biāo)簽可以不成對出現(xiàn)),但XML必須關(guān)閉標(biāo)簽(即標(biāo)簽必須成對出現(xiàn))。 5、HTML中的標(biāo)簽標(biāo)識文本如何展示,而XML中的標(biāo)簽標(biāo)識文本是什么含義(什么類型的文本)。
XML文檔節(jié)點(diǎn)類型 文檔(document) 元素(element) 屬性(attribute) 文本(PCDATA--parsed character data) 注釋(comment) DOCTYPE :主要驗(yàn)證文檔內(nèi)容的正確性 實(shí)體(ENTITIES) CDATA(character data) 1.4、XML語法; 1、聲明:2、根節(jié)點(diǎn):必須只能有一個根節(jié)點(diǎn) 3、標(biāo)簽:標(biāo)簽必須有結(jié)束且區(qū)分大小寫,標(biāo)簽必須順序嵌套 4、屬性:必須引號引起值 5、空格會被保留,HTML空格最多保留一個 6、命名規(guī)則:命名必須見名知意 a)名字可包含字母、數(shù)字以及其他的字符 b)名字不能以數(shù)字或者標(biāo)點(diǎn)符號開始 c)名字不能以字符"xml”(或者XML、 Xml) 開始 7、名字不能包含空格
8、 不應(yīng)在XML元素名稱中使用":",這是由于它用于命名空間(namespaces) 的保留字。 9、標(biāo)簽優(yōu)先于屬性。 10、XML 命名空間可提供避免元素命名沖突的方法。
CDATA: 字符數(shù)據(jù),,字符數(shù)據(jù)不進(jìn)行轉(zhuǎn)義
12、 實(shí)體: &實(shí)體;
1.5、 Xml約束 1.5.1、 XML DTD約束 DTD (DocType Definition文檔類型定義)的作用是定義XML文檔的合法構(gòu)建模塊。它使用一系列的合法元素來定義文檔結(jié)構(gòu)。 用 于約定XML格式。 1、DTD引用方式 1.1、內(nèi)部
1.5.2、 XML Schema約束 XML Schema是基于XML的DTD替代者。XML Schema描述XML文檔的結(jié)構(gòu)。XML Schema語言也稱作XML Schema定,義 (XML Schema Definition, XSD)。+ DTD不是通過XML語法定義文檔結(jié)構(gòu),不能定義數(shù)據(jù)類型和限制Schema通過XML語法定義文檔結(jié)構(gòu),可以定義數(shù)據(jù)類型和限制 約定XML格式 定義可出現(xiàn)在文檔中的元素 定義可出現(xiàn)在文檔中的屬性 定義哪個元素是子元素 定義子元素的次序 定義子元素的數(shù)目 定義元素是否為空,或者是否可包含文本 定義元素和屬性的數(shù)據(jù)類型 定義元素和屬性的默認(rèn)值以及固定值
1、為何使用Schema Vr XML Schema是DTD的繼任者 XML Schema可針對未來的需求進(jìn)行擴(kuò)展 XML Schema更完善,功能更強(qiáng)大 XML Schema基于XML編寫 XML Schema支持?jǐn)?shù)據(jù)類型和限制 XML Schema支持命名空間
二、Java XML教程 1、Java XML解析器 1.1、什么是XML解析? 解析XML是指將通過XML文檔訪問數(shù)據(jù)或修改數(shù)據(jù)的一個操作或方法。 Java庫中提供了兩種XML解析器: 1、像文檔對象模型(Document Object Model, DOM) 解析器這的樹型解析器(tree parse),它們將讀入的XML文檔轉(zhuǎn)換成樹結(jié)構(gòu)。 2、像XML簡單API (Simple API for XML,SAX) 解析器這樣的流機(jī)制解析器(streaming parser),它們在讀入XML文檔時生成相應(yīng)的事件。 1.2、XML解析器是什么? XML解析器提供方法來訪問或修改XML文檔中的數(shù)據(jù)。Java提供 了多種選擇來解析XML文檔。以下是各種類型解析器其通常用于解析 XML文檔。 Dom解析器-解析通過加載該文件的全部內(nèi)容,并創(chuàng)建其完整分級樹中存儲的文件。 SAX解析器-解析基于事件觸發(fā)器的文檔。不完整(部分)的文件加載到存儲器中。 JDOM解析器-解析以類似的方式,以DOM解析器但更簡單的方法的文檔。 StAX解析器-解析以類似的方式,以SAX解析器但在更高效的方式的文檔。 XPath解析器-解析基于表達(dá)式XML并廣泛選擇使用XSLT。 DOM4]解析器- Java庫來解析XML, XPath和使用Java集合框架XSLT, 為DOM, SAX和JAXP的支持。 6、Java DOM4]解析器 優(yōu)勢 DOM4]使Java開發(fā)的靈活性和XML解析代碼易于維護(hù)。它是輕量級的,快速的API。
DOM4j類 DOM制定義了幾個Java類。以下是最常見的類: 類 說明 Document:表示整個XML文檔。文檔Document對象是通常被稱為DOM樹。 Element: 表示一個XML元素。Element對象有方法來操作其子元素, 它的文本,屬性和名稱空間。 Attribute: 表示元素的屬性。屬性有方法來獲取和設(shè)置屬性的值。它有父節(jié)點(diǎn)和屬性類型。 Node : 代表元素,屬性或處理指令
Document提供了獲取根元素的方法:Element getRootElement() 而element的每一個實(shí)例用于表示當(dāng)前xml文件的一個元素(一對標(biāo)簽),它提供了獲取 其元素相關(guān)的方法: 獲取當(dāng)前標(biāo)簽的名字:String getName() 獲取當(dāng)前標(biāo)簽中間的文本:String getText() 獲取當(dāng)前標(biāo)簽下指定名字的子標(biāo)簽:Element element(String name) 獲取當(dāng)前標(biāo)簽下的所有子標(biāo)簽:List elements() 獲取當(dāng)前標(biāo)簽下指定名字的子標(biāo)簽:List elements(String name) 獲取當(dāng)前標(biāo)簽下指定名字標(biāo)簽的屬性:Attribute attribute(String name) Attribute的每一個實(shí)例表示一個屬性,它有兩個方法: 獲取屬性名:String getName() 獲取屬性值:String getValue()
一、設(shè)計模式的分類
總體來說設(shè)計模式分為三大類:
創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結(jié)構(gòu)型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責(zé)任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。
其實(shí)還有兩類:并發(fā)型模式和線程池模式。
二、設(shè)計模式的六大原則
1、開閉原則(Open Close Principle)
開閉原則就是說對擴(kuò)展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時候,不能去修改原有的代碼,實(shí)現(xiàn)一個熱插拔的效果。所以一句話概括就是:為了使程序的擴(kuò)展性好,易于維護(hù)和升級。想要達(dá)到這樣的效果,我們需要使用接口和抽象類,后面的具體設(shè)計中我們會提到這點(diǎn)。
2、里氏代換原則(Liskov Substitution Principle)
里氏代換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計的基本原則之一。 里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。 LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。里氏代換原則是對“開-閉”原則的補(bǔ)充。實(shí)現(xiàn)“開-閉”原則的關(guān)鍵步驟就是抽象化。而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。—— From Baidu 百科
3、依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)
這個是開閉原則的基礎(chǔ),具體內(nèi)容:針對接口編程,依賴于抽象而不依賴于具體。
4、接口隔離原則(Interface Segregation Principle)
這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實(shí)設(shè)計模式就是一個軟件的設(shè)計思想,從大型軟件架構(gòu)出發(fā),為了升級和維護(hù)方便。所以上文中多次出現(xiàn):降低依賴,降低耦合。
5、迪米特法則(最少知道原則)(Demeter Principle)
為什么叫最少知道原則,就是說:一個實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨(dú)立。
6、合成復(fù)用原則(Composite Reuse Principle)
原則是盡量使用合成/聚合的方式,而不是使用繼承。
三、Java的23中設(shè)計模式
從這一塊開始,我們詳細(xì)介紹Java中23種設(shè)計模式的概念,應(yīng)用場景等情況,并結(jié)合他們的特點(diǎn)及設(shè)計模式的原則進(jìn)行分析。
1、工廠方法模式(Factory Method)
工廠方法模式分為三種:
1、普通工廠模式,就是建立一個工廠類,對實(shí)現(xiàn)了同一接口的一些類進(jìn)行實(shí)例的創(chuàng)建。
2、多個工廠方法模式,是對普通工廠方法模式的改進(jìn),在普通工廠方法模式中,如果傳遞的字符串出錯,則不能正確創(chuàng)建對象,而多個工廠方法模式是提供多個工廠方法,分別創(chuàng)建對象。
3、靜態(tài)工廠方法模式,將上面的多個工廠方法模式里的方法置為靜態(tài)的,不需要創(chuàng)建實(shí)例,直接調(diào)用即可。
一、HTTP基礎(chǔ) 1、web 交互的基本流程客戶端根據(jù)用戶輸入的地址信息請求服務(wù)器,服務(wù)器在接收到用戶的請求后進(jìn)行處理,然后將處理結(jié)果響應(yīng)給客戶端,客戶端將響應(yīng)結(jié)果展示給用戶。 ? 專業(yè)術(shù)語: ? 請求:客戶端根據(jù)用戶地址信息將數(shù)據(jù)發(fā)送給服務(wù)器的過程 ? 響應(yīng):服務(wù)器將請求的處理結(jié)果發(fā)送給瀏覽器的過程
問題: ? 客戶端也就是瀏覽器的版本是有很多的,服務(wù)器的版本也是有很多的,如何實(shí)現(xiàn)不同版本的瀏覽器和不同版本的服務(wù)器之間的數(shù)據(jù)交互呢? ? 解決: ? 規(guī)范瀏覽器和服務(wù)器的數(shù)據(jù)交互的格式。 ? 實(shí)現(xiàn): ? HTTP 協(xié)議
2、HTTP 的概念和介紹概念: ? 超文本傳輸協(xié)議(Hyper Text Transfer Protocol)
作用: ? 規(guī)范了瀏覽器和服務(wù)器的數(shù)據(jù)交互
特點(diǎn): ? 簡單快速:客戶向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑。請求方法常用的有 GET、HEAD、POST。每種方法規(guī)定了客 戶與服務(wù)器聯(lián)系的類型不同。由于 HTTP 協(xié)議簡單,使得 HTTP 服務(wù)器的程序規(guī)模小,因而通信速度很快 ? 靈活:HTTP 允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type 加以標(biāo)記。 ? 無連接:無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這 種方式可以節(jié)省傳輸時間。 ? 無狀態(tài):HTTP 協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信 息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。支持 B/S 及 C/S 模式。HTTP1.1 版本后支持可持續(xù)連接
3、HTTP 的交互流程:HTTP 的交互流程一般分為四個步驟(一次完整的請求): ? 步驟一: ? 客戶端和服務(wù)器端建立連接 ? 步驟二: ? 客戶端發(fā)送請求數(shù)據(jù)到服務(wù)器端(HTTP 協(xié)議) ? 步驟三: ? 服務(wù)器端接收到請求后,進(jìn)行處理,然后將處理結(jié)果響應(yīng)客戶端(HTTP 協(xié)議) ? 步驟四: ? 關(guān)閉客戶端和服務(wù)器端的連接(HTTP1.1 后不會立即關(guān)閉)
4、HTTP 協(xié)議之請求格式請求格式的結(jié)構(gòu): ? 請求頭:請求方式、請求的地址和 HTTP 協(xié)議版本 ? 請求行:消息報頭,一般用來說明客戶端要使用的一些附加信息 ? 空行: 位于請求行和請求數(shù)據(jù)之間,空行是必須的。 ? 請求數(shù)據(jù):非必須。
注意: 一張網(wǎng)頁的內(nèi)容是極其豐富的,瀏覽器會遵循HTTP 請求的格式將有效數(shù)據(jù)發(fā)送給服務(wù)器。
5、HTTP 協(xié)議之請求方式根據(jù) HTTP 標(biāo)準(zhǔn),HTTP 請求可以使用多種請求方法。HTTP1.0 定義了三種請求方法: GET, POST 和 HEAD 方法。HTTP1.1 新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和CONNECT 方法。
get 和 post 請求方式的區(qū)別: get 請求方式: 請求數(shù)據(jù)會以?的形式隔開拼接在請求頭中,不安全,沒有請求實(shí)體部分。HTTP 協(xié)議雖然沒有規(guī)定請求數(shù)據(jù)的大小,但是瀏覽 器對 URL 的長度是有限制的,所以 get 請求不能攜帶大量的數(shù)據(jù)。
post 請求方式: ? 請求數(shù)據(jù)在請求實(shí)體中進(jìn)行發(fā)送,在 URL 中看不到具體的請求數(shù)據(jù),安全。適合數(shù)據(jù)量大的數(shù)據(jù)發(fā)送。
6、HTTP 協(xié)議之響應(yīng)響應(yīng)格式的結(jié)構(gòu): ? 響應(yīng)行(狀態(tài)行):HTTP 版本、狀態(tài)碼、狀態(tài)消息 ? 響應(yīng)頭:消息報頭,客戶端使用的附加信息 ? 空行:響應(yīng)頭和響應(yīng)實(shí)體之間的,必須的。 ? 響應(yīng)實(shí)體:正文,服務(wù)器返回給瀏覽器的信息
常見狀態(tài)碼: 200 OK //客戶端請求成功 400 Bad Request //客戶端請求有語法錯誤,不能被服務(wù)器所理解 401 Unauthorized //請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate 報頭域一起使用 403 Forbidden //服務(wù)器收到請求,但是拒絕提供服務(wù) 404 Not Found //請求資源不存在,eg:輸入了錯誤的 URL 500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯誤 503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請求,一段時間后可能恢復(fù)正常
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧