XML編程詳細(xì)講解_第1頁
XML編程詳細(xì)講解_第2頁
XML編程詳細(xì)講解_第3頁
XML編程詳細(xì)講解_第4頁
XML編程詳細(xì)講解_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

XML概述主要內(nèi)容XML及其語法XML約束之DTDXML編程(CRUD---CreateReadUpdateDelete)XML約束之Schema什么是XMLXML是指可擴(kuò)展標(biāo)記語言(eXtensible

MarkupLanguage),它是一種標(biāo)記語言,很類似HTML。它被設(shè)計的宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)。XML標(biāo)簽沒有被預(yù)定義,需要用戶自行定義標(biāo)簽。XML技術(shù)是W3C組織(WorldWideWebConsortium萬維網(wǎng)聯(lián)盟)發(fā)布的,目前遵循的是W3C組織于2000年發(fā)布的XML1.0規(guī)范。XML被廣泛認(rèn)為是繼Java之后在Internet上最激動人心的新技術(shù)。XML技術(shù)用于解決什么問題?在現(xiàn)實(shí)生活中存在大量有關(guān)系的數(shù)據(jù),如右圖所示。問題:這樣的數(shù)據(jù)該如何表示并交給計算機(jī)處理呢?XML技術(shù)用于解決什么問題?XML語言出現(xiàn)的根本目的在于描述向上圖那種有關(guān)系的數(shù)據(jù)。XML是一種通用的數(shù)據(jù)交換格式。在XML語言中,它允許用戶自定義標(biāo)簽。一個標(biāo)簽用于描述一段數(shù)據(jù);一個標(biāo)簽可分為開始標(biāo)簽和結(jié)束標(biāo)簽,在起始標(biāo)簽之間,又可以使用其它標(biāo)簽描述其它數(shù)據(jù),以此來實(shí)現(xiàn)數(shù)據(jù)關(guān)系的描述。XML中的數(shù)據(jù)必須通過軟件程序來解析執(zhí)行或顯示,如IE;這樣的解析程序稱之為Parser(解析器)。<?xmlversion="1.0"encoding="UTF-8"?><中國> <北京> <海淀></海淀> <豐臺></豐臺> </北京> <山東> <濟(jì)南></濟(jì)南> <青島></青島> </山東> <湖北> <武漢></武漢> <荊州></荊州> </湖北></中國>XML常見應(yīng)用在Java開發(fā)中,傳統(tǒng)的配置文件是*.properties屬性文件(key=value),而XML表示的數(shù)據(jù)更為豐富。XML技術(shù)除用于描述有關(guān)系的數(shù)據(jù)外,還經(jīng)常用作軟件配置文件,以描述程序模塊之間的關(guān)系。(如后面將要學(xué)習(xí)到的Struts、Spring和Hibernate都是基于XML作為配置文件的)在一個軟件系統(tǒng)中,通過XML配置文件可以提高系統(tǒng)的靈活性。即程序的行為是通過XML文件來配置的,而不是硬編碼。XML語法XML文檔的組成一個XML文件一般由以下幾部分組成:文檔聲明元素元素的屬性注釋CDATA區(qū)特殊字符處理指令(PI:Processing

Instruction)文檔聲明在編寫XML文檔時,需要先使用文檔聲明來聲明XML文檔。且必須出現(xiàn)在文檔的第一行。最簡單的語法:<?xmlversion=“1.0”?>用encoding屬性說明文檔所使用的字符編碼,默認(rèn)為UTF-8。保存在磁盤上的文件編碼要與聲明的編碼一致。

如:<?xmlversion=“1.0”encoding=“GB2312”?>用standalone屬性說明文檔是否獨(dú)立,即是否依賴其他文檔。 如:<?xmlversion=“1.0”standalone=“yes”?>元素(1)XML元素指XML文件中出現(xiàn)的標(biāo)簽。一個標(biāo)簽分為起始和結(jié)束標(biāo)簽(不能省略)。一個標(biāo)簽有如下幾種書寫形式:包含標(biāo)簽主體:<mytag>somecontent</mytag>不含標(biāo)簽主體:<mytag/>一個標(biāo)簽中可以嵌套若干子標(biāo)簽,但所有標(biāo)簽必須合理的嵌套,不允許有交叉嵌套。<mytag1><mytag2></mytag1></mytag2>WRONG一個XML文檔必須有且僅有一個根標(biāo)簽,其他標(biāo)簽都是這個根標(biāo)簽的子標(biāo)簽或?qū)O標(biāo)簽。元素(2)XML中不會忽略主體內(nèi)容中出現(xiàn)的空格和換行。注:由于在XML中,空格和換行都作為原始內(nèi)容被處理,所以,在編寫XML文件時,使用換行和縮進(jìn)等方式來讓原文件中的內(nèi)容清晰可讀的“良好”書寫習(xí)慣可能要被迫改變。第一段:<中國><北京><海淀/></北京></中國>

第二段:<中國>\r\n\t <北京> <海淀/> </北京></中國>給人看元素(3)--元素命名規(guī)范元素(標(biāo)簽)的名稱可以包含字母、數(shù)字、減號、下劃線和英文句點(diǎn),但必須遵守下面的一些規(guī)范:嚴(yán)格區(qū)分大小寫;<P><p>只能以字母或下劃線開頭;abc_abc不能以xml(或XML、Xml等)開頭----W3C保留日后使用;名稱字符之間不能有空格或制表符;ab名稱字符之間不能使用冒號;(有特殊用途)元素的屬性一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值,例如:<mytagname=“value”…/>屬性值一定要用引號(單引號或雙引號)引起來。屬性名稱的命名規(guī)范與元素的命名規(guī)范相同元素中的屬性是不允許重復(fù)的在XML技術(shù)中,標(biāo)簽屬性所代表的信息也可以被改成用子元素的形式來描述,例如:<mytag> <name> <firstName/> <lastName/> </name></mytag>注釋XML中的注釋語法為:<!--這是注釋-->注意:XML聲明之前不能有注釋注釋不能嵌套,例如:<!--大段注釋… <!--有一段注釋-->…-->WRONGCDATA區(qū)CDATA是CharacterData的縮寫作用:把標(biāo)簽當(dāng)做普通文本內(nèi)容;語法:<![CDATA[內(nèi)容]]><![CDATA[

<itcast></itcast>]]>以上紅色部分被當(dāng)做普通文本而不是標(biāo)簽特殊字符對于一些特殊字符,若要在元素主體內(nèi)容中顯示,必須進(jìn)行轉(zhuǎn)義。處理指令處理指令,簡稱PI(Processing

Instruction)。作用:用來指揮軟件如何解析XML文檔。語法:必須以“<?”作為開頭,以“?>”作為結(jié)尾。常用處理指令:XML聲明:<?xmlversion=“1.0”encoding=“GB2312”?>xml-stylesheet指令:作用:指示XML文檔所使用的CSS樣式XSL。<?xml-stylesheettype=“text/css”href=“some.css”?>注:對中文命名的標(biāo)簽元素不起作用XML約束之DTD為什么需要約束XML都是用戶自定義的標(biāo)簽,若出現(xiàn)小小的錯誤,軟件程序?qū)⒉荒苷_地獲取文件中的內(nèi)容而報錯。(如:Tomcat)XML技術(shù)中,可以編寫一個文檔來約束一個XML的書寫規(guī)范,這個文檔稱之為約束。兩個概念:格式良好的XML:遵循XML語法的XML有效的XML:遵循約束文檔的XML總之:約束文檔定義了在XML中允許出現(xiàn)的元素名稱、屬性及元素出現(xiàn)的順序等等。常用的約束技術(shù)XMLDTDXDRSOXXMLSchemaDTD快速入門DTD(DocumentTypeDefinition):文檔類型定義。作用:約束XML的書寫規(guī)范文件清單:book.xml<?xmlversion="1.0"?><!DOCTYPE書架SYSTEM"book.dtd"><書架> <書> <書名>Java就業(yè)培訓(xùn)教程</書名> <作者>張孝祥</作者> <售價>39.00元</售價> </書> <書> <書名>JavaScript網(wǎng)頁開發(fā)</書名> <作者>張孝祥</作者> <售價>28.00元</售價> </書></書架>文件清單:book.dtd

<!ELEMENT書架(書+)> <!ELEMENT書(書名,作者,售價)> <!ELEMENT書名(#PCDATA)> <!ELEMENT作者(#PCDATA)> <!ELEMENT售價(#PCDATA)>驗證XML的有效性如何根據(jù)DTD中定義的內(nèi)容來驗證XML書寫是否正確呢?答:需要軟件程序,即解析器根據(jù)能否對XML文檔進(jìn)行約束模式校驗,可以將解析器分為兩類:非校驗解析器,如IE校驗解析器編程校驗XML文檔的正確性IE5以上瀏覽器內(nèi)置了XML解析工具:Microsort.XMLDOM,開發(fā)人員可以編寫javascript代碼,利用這個解析工具裝載xml文件,并對xml文件進(jìn)行dtd驗證。創(chuàng)建xml文檔解析器對象var

xmldoc=newActiveXObject("Microsoft.XMLDOM");開啟xml校驗xmldoc.validateOnParse="true";裝載xml文檔xmldoc.load("book.xml");獲取錯誤信息xmldoc.parseError.reason;xmldoc.parseError.line編寫DTD的方式DTD約束文檔可以在XML文檔中直接定義,也可以作為單獨(dú)的文檔進(jìn)行編寫(單獨(dú)的文檔必須以UTF-8編碼進(jìn)行保存)。在XML文檔中編寫DTD示例<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><!DOCTYPE書架[ <!ELEMENT書架(書+)> <!ELEMENT書(書名,作者,售價)> <!ELEMENT書名(#PCDATA)> <!ELEMENT作者(#PCDATA)> <!ELEMENT售價(#PCDATA)>]><書架> <書> <書名>Java就業(yè)培訓(xùn)教程</書名> <作者>張孝祥</作者> <售價>39.00元</售價> </書> ...</書架>引入外部DTD文檔XML使用DOCTYPE聲明語句來指明它所遵循的DTD文檔,有兩種形式:當(dāng)引用的DTD文檔在本地時,采用如下方式:<!DOCTYPE根元素SYSTEM“DTD文檔路徑”>如:<!DOCTYPE書架SYSTEM“book.dtd”>當(dāng)引用的DTD文檔在公共網(wǎng)絡(luò)上時,采用如下方式:<!DOCTYPE根元素PUBLIC“DTD名稱”“DTD文檔的URL”>如:<!DOCTYPEweb-appPUBLIC "-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" "/dtd/web-app_2_3.dtd">DTD語法細(xì)節(jié)DTD文檔的語法主要涉及以下內(nèi)容的定義:定義元素定義屬性定義實(shí)體DTD-定義元素在DTD文檔中使用ELEMENT關(guān)鍵字來聲明一個XML元素。語法:<!ELEMENT元素名稱使用規(guī)則>使用規(guī)則:(#PCDATA):指示元素的主體內(nèi)容只能是普通的文本.(ParsedCharacterData)EMPTY:用于指示元素的主體為空。比如<br/>ANY:用于指示元素的主體內(nèi)容為任意類型。(子元素):指示元素中包含的子元素定義子元素及描述它們的關(guān)系:如果子元素用逗號分開,說明必須按照聲明順序去編寫XML文檔。如:<!ELEMENTFILE(TITLE,AUTHOR,EMAIL)如果子元素用“|”分開,說明任選其一。如:<!ELEMENTFILE(TITLE|AUTHOR|EMAIL)用+、*、?來表示元素出現(xiàn)的次數(shù)如果元素后面沒有+*?:表示必須且只能出現(xiàn)一次+:表示至少出現(xiàn)一次,一次或多次*:表示可有可無,零次、一次或多次?:表示可以有也可以無,有的話只能有一次。零次或一次如:<!ELEMENTMYFILE((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>DTD--定義屬性1在DTD文檔中使用ATTLIST關(guān)鍵字來為一個元素聲明屬性。語法:<!ATTLIST元素名 屬性名1屬性值類型設(shè)置說明 屬性名2屬性值類型設(shè)置說明

…>例如:<!ATTLIST商品 類別

CDATA#REQUIRED

顏色

CDATA#IMPLIED>對應(yīng)的XML為:<商品類別=“服裝”顏色=“黃色”/>DTD--定義屬性2屬性值類型:CDATA:表示屬性的取值為普通的文本字符串ENUMERATED(DTD沒有此關(guān)鍵字):表示枚舉,只能從枚舉列表中任選其一,如(雞肉|牛肉|豬肉|魚肉)ID:表示屬性的取值不能重復(fù)設(shè)置說明#REQUIRED:表示該屬性必須出現(xiàn)#IMPLIED:表示該屬性可有可無#FIXED:表示屬性的取值為一個固定值。語法:#FIXED"固定值"直接值:表示屬性的取值為該默認(rèn)值DTD--定義屬性示例1、<!ATTLIST

頁面作者 姓名CDATA#IMPLIED

年齡CDATA#IMPLIED

聯(lián)系信息CDATA#REQUIRED

網(wǎng)站職務(wù)CDATA#FIXED"頁面作者"

個人愛好CDATA"上網(wǎng)"

>

2、<?xmlversion="1.0"encoding="GB2312"standalone="yes"?><!DOCTYPE購物籃[ <!ELEMENT肉EMPTY> <!ATTLIST肉品種(雞肉|牛肉|豬肉|魚肉)"雞肉">]><購物籃> <肉品種="魚肉"/> <肉品種="牛肉"/> <肉/></購物籃>DTD--定義屬性示例ID表示屬性的設(shè)置值為一個唯一值。<?xmlversion="1.0"encoding="GB2312"?><!DOCTYPE聯(lián)系人列表[ <!ELEMENT聯(lián)系人列表ANY> <!ELEMENT聯(lián)系人(姓名,EMAIL)> <!ELEMENT姓名(#PCDATA)> <!ELEMENTEMAIL(#PCDATA)>

<!ATTLIST聯(lián)系人編號ID#REQUIRED>]><聯(lián)系人列表> <聯(lián)系人編號=“a"> <姓名>張三</姓名> <EMAIL>zhang@</EMAIL></聯(lián)系人> <聯(lián)系人編號=“b"> <姓名>李四</姓名> <EMAIL>li@</EMAIL> </聯(lián)系人></聯(lián)系人列表>DTD--定義實(shí)體定義實(shí)體就是為一段內(nèi)容指定一個名稱,使用時通過這個名稱就可以引用其所代表的內(nèi)容。在DTD文檔中使用ENTITY關(guān)鍵字來聲明一個實(shí)體。實(shí)體可分為:引用實(shí)體和參數(shù)實(shí)體,兩者的語法不同定義引用實(shí)體概念:在DTD中定義,在XML中使用語法:<!ENTITY實(shí)體名稱“實(shí)體內(nèi)容”>引用方式(注意是在XML中使用):&實(shí)體名稱;DTD中定義: <!ENTITYcopyright“傳智播客版權(quán)所有”>XML中引用: ©right;定義參數(shù)實(shí)體(了解)概念:在DTD中定義,在DTD中使用語法:<!ENTITY%實(shí)體名稱“實(shí)體內(nèi)容”>引用方式(注意是在DTD中使用):%實(shí)體名稱;DTD中定義: <!ENTITY%TAG_NAMES"姓名|EMAIL|電話|地址">DTD中引用: <!ELEMENT個人信息(%TAG_NAMES;|生日)><!ELEMENT客戶信息(%TAG_NAMES;|公司名)>XML及DTD練習(xí)XML練習(xí)題右鍵復(fù)制DTD實(shí)例XML編程(用Java編寫解析器)Java解析XML概述XML解析方式分為兩種:DOM方式和SAX方式DOM:DocumentObjectModel,文檔對象模型。這種方式是W3C推薦的處理XML的一種方式。SAX:SimpleAPIforXML。這種方式不是官方標(biāo)準(zhǔn),屬于開源社區(qū)XML-DEV,幾乎所有的XML解析器都支持它。XML解析開發(fā)包JAXP:是SUN公司推出的解析標(biāo)準(zhǔn)實(shí)現(xiàn)。Dom4J:是開源組織推出的解析開發(fā)包。(牛,大家都在用,包括SUN公司的一些技術(shù)的實(shí)現(xiàn)都在用)JDom:是開源組織推出的解析開發(fā)包。JAXPJAXP:(JavaAPIforXMLProcessing)開發(fā)包是JavaSE的一部分,它由以下幾個包及其子包組成:org.w3c.dom:提供DOM方式解析XML的標(biāo)準(zhǔn)接口org.xml.sax:提供SAX方式解析XML的標(biāo)準(zhǔn)接口javax.xml:提供了解析XML文檔的類javax.xml.parsers包中,定義了幾個工廠類。我們可以通過調(diào)用這些工廠類,得到對XML文檔進(jìn)行解析的DOM和SAX解析器對象。DocumentBuilderFactorySAXParserFactory使用JAXP進(jìn)行DOM解析javax.xml.parsers

包中的DocumentBuilderFactory用于創(chuàng)建DOM模式的解析器對象,DocumentBuilderFactory是一個抽象工廠類,它不能直接實(shí)例化,但該類提供了一個newInstance方法,這個方法會根據(jù)本地平臺默認(rèn)安裝的解析器,自動創(chuàng)建一個工廠的對象并返回。獲得JAXP中的DOM解析器調(diào)用DocumentBuilderFactory.newInstance()方法得到創(chuàng)建DOM解析器的工廠。調(diào)用工廠對象的newDocumentBuilder方法得到DOM解析器對象。調(diào)用DOM解析器對象的parse()方法解析XML文檔,得到代表整個文檔的Document對象,進(jìn)行可以利用DOM特性對整個XML文檔進(jìn)行操作了。Tip:DOM編程DOM模型(documentobjectmodel)DOM解析器在解析XML文檔時,會把文檔中的所有元素,按照其出現(xiàn)的層次關(guān)系,解析成一個個Node對象(節(jié)點(diǎn))。在dom中,節(jié)點(diǎn)之間關(guān)系如下:位于一個節(jié)點(diǎn)之上的節(jié)點(diǎn)是該節(jié)點(diǎn)的父節(jié)點(diǎn)(parent)一個節(jié)點(diǎn)之下的節(jié)點(diǎn)是該節(jié)點(diǎn)的子節(jié)點(diǎn)(children)同一層次,具有相同父節(jié)點(diǎn)的節(jié)點(diǎn)是兄弟節(jié)點(diǎn)(sibling)一個節(jié)點(diǎn)的下一個層次的節(jié)點(diǎn)集合是節(jié)點(diǎn)后代(descendant)父、祖父節(jié)點(diǎn)及所有位于節(jié)點(diǎn)上面的,都是節(jié)點(diǎn)的祖先(ancestor)節(jié)點(diǎn)類型(下頁ppt)Node對象Node對象提供了一系列常量來代表結(jié)點(diǎn)的類型,當(dāng)開發(fā)人員獲得某個Node類型后,就可以把Node節(jié)點(diǎn)轉(zhuǎn)換成相應(yīng)的節(jié)點(diǎn)對象(Node的子類對象),以便于調(diào)用其特有的方法。(查看API文檔)Node對象提供了相應(yīng)的方法去獲得它的父結(jié)點(diǎn)或子結(jié)點(diǎn)。編程人員通過這些方法就可以讀取整個XML文檔的內(nèi)容、或添加、修改、刪除XML文檔的內(nèi)容了。DOM方式解析XML文件DOM解析編程1、得到某個具體的節(jié)點(diǎn)內(nèi)容2、遍歷所有元素節(jié)點(diǎn)3、修改某個元素節(jié)點(diǎn)的主體內(nèi)容4、向指定元素節(jié)點(diǎn)中增加子元素節(jié)點(diǎn)5、向指定元素節(jié)點(diǎn)上增加同級元素節(jié)點(diǎn)6、刪除指定元素節(jié)點(diǎn)7、操作XML文件屬性DOM編程練習(xí)更新XML文檔javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉(zhuǎn)換為某種格式后進(jìn)行輸出,例如把xml文件應(yīng)用樣式表后轉(zhuǎn)成一個html文檔。利用這個對象,當(dāng)然也可以把Document對象又重新寫入到一個XML文件中。Transformer類通過transform方法完成轉(zhuǎn)換操作,該方法接收一個源和一個目的地。我們可以通過:javax.xml.transform.dom.DOMSource類來關(guān)聯(lián)要轉(zhuǎn)換的document對象,用javax.xml.transform.stream.StreamResult

對象來表示數(shù)據(jù)的目的地。

Transformer對象通過TransformerFactory獲得。SAX解析在使用DOM解析XML文檔時,需要讀取整個XML文檔,在內(nèi)存中構(gòu)架代表整個DOM樹的Doucment對象,從而再對XML文檔進(jìn)行操作。此種情況下,如果XML文檔特別大,就會消耗計算機(jī)的大量內(nèi)存,并且容易導(dǎo)致內(nèi)存溢出。SAX解析允許在讀取文檔的時候,即對文檔進(jìn)行處理,而不必等到整個文檔裝載完才會文檔進(jìn)行操作。SAX解析SAX采用事件處理的方式解析XML文件,利用SAX解析XML文檔,涉及兩個部分:解析器和事件處理器:解析器可以使用JAXP的API創(chuàng)建,創(chuàng)建出SAX解析器后,就可以指定解析器去解析某個XML文檔。解析器采用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成部分,都會去調(diào)用事件處理器的一個方法,解析器在調(diào)用事件處理器的方法時,會把當(dāng)前解析到的xml文件內(nèi)容作為方法的參數(shù)傳遞給事件處理器。事件處理器由程序員編寫,程序員通過事件處理器中方法的參數(shù),就可以很輕松地得到sax解析器解析到的數(shù)據(jù),從而可以決定如何對數(shù)據(jù)進(jìn)行處理。SAX解析閱讀ContentHandlerAPI文檔,常用方法:startElement、endElement、charactersSAX方式解析XML文檔使用SAXParserFactory創(chuàng)建SAX解析工廠SAXParserFactory

spf=SAXParserFactory.newInstance();通過SAX解析工廠得到解析器對象 SAXParsersp=spf.newSAXParser();通過解析器對象得到一個XML的讀取器XMLReader

xmlReader=sp.getXMLReader();設(shè)置讀取器的事件處理器 xmlReader.setContentHandler(new

BookParserHandler());解析xml文件 xmlReader.parse("book.xml");SAX方式解析XML文檔SAX解析編程DOM4J解析XML文檔Dom4j是一個簡單、靈活的開放源代碼的庫。Dom4j是由早期開發(fā)JDOM的人分離出來而后獨(dú)立開發(fā)的。與JDOM不同的是,dom4j使用接口和抽象基類,雖然Dom4j的API相對要復(fù)雜一些,但它提供了比JDOM更好的靈活性。Dom4j是一個非常優(yōu)秀的JavaXMLAPI,具有性能優(yōu)異、功能強(qiáng)大和極易使用的特點(diǎn)?,F(xiàn)在很多軟件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。使用Dom4j開發(fā),需下載dom4j相應(yīng)的jar文件。Document對象DOM4j中,獲得Document對象的方式有三種:

1.讀取XML文件,獲得document對象

SAXReaderreader=newSAXReader();

Document

document=reader.read(new

File("input.xml")); 2.解析XML形式的文本,得到document對象.

Stringtext="<members></members>";

Documentdocument=DocumentHelper.parseText(text); 3.主動創(chuàng)建document對象.

Documentdocument=DocumentHelper.createDocument();

//創(chuàng)建根節(jié)點(diǎn)

Elementroot=document.addElement("members");節(jié)點(diǎn)對象1.獲取文檔的根節(jié)點(diǎn).Elementroot=document.getRootElement();2.取得某個節(jié)點(diǎn)的子節(jié)點(diǎn). Elementelement=node.element(“書名");3.取得節(jié)點(diǎn)的文字

Stringtext=node.getText();節(jié)點(diǎn)對象4.取得某節(jié)點(diǎn)下所有名為“member”的子節(jié)點(diǎn),并進(jìn)行遍歷.

Listnodes=rootElm.elements("member");

for(Iteratorit=nodes.iterator();it.hasNext();){

Elementelm=(Element)it.next();

//dosomething

}5.對某節(jié)點(diǎn)下的所有子節(jié)點(diǎn)進(jìn)行遍歷.

for(Iteratorit=root.elementIterator();it.hasNext();){

Elementelement=(Element)it.next();

//dosomething

}6.在某節(jié)點(diǎn)下添加子節(jié)點(diǎn).

ElementageElm=newMemberElm.addElement("age");節(jié)點(diǎn)對象7.設(shè)置節(jié)點(diǎn)文字.

element.setText("29");8.刪除某節(jié)點(diǎn).

//childElm是待刪除的節(jié)點(diǎn),parentElm是其父節(jié)點(diǎn)

parentElm.remove(childElm);

9.添加一個CDATA節(jié)點(diǎn).

ElementcontentElm=infoElm.addElement("content");

contentElm.addCDATA(diary.getContent());節(jié)點(diǎn)對象屬性1.取得某節(jié)點(diǎn)下的某屬性

Elementroot=document.getRootElement();

//屬性名nameAttributeattribute=root.attribute("size");

2.取得屬性的文字

Stringtext=attribute.getText();3.刪除某屬性

Attributeattribute=root.attribute("size");

root.remove(attribute);節(jié)點(diǎn)對象屬性3.遍歷某節(jié)點(diǎn)的所有屬性

Elementroot=document.getRootElement();

for(Iteratorit=root.attributeIterator();it.hasNext();){

Attributeattribute=(Attribute)it.next();

Stringtext=attribute.getText();

System.out.println(text);

}4.設(shè)置某節(jié)點(diǎn)的屬性和文字.

newMemberElm.addAttribute("name","sitinspring");5.設(shè)置屬性的文字

Attributeattribute=root.attribute("name");

attribute.setText("sitinspring");將文檔寫入XML文件.1.文檔中全為英文,不設(shè)置編碼,直接寫入的形式.

XMLWriterwriter=newXMLWriter(new

FileWriter("output.xml"));

writer.write(document);

writer.close();2.文檔中含有中文,設(shè)置編碼格式寫入的形式.

OutputFormatformat=OutputFormat.createPrettyPrint();

//指定XML編碼

format.setEncoding("GBK");

XMLWriterwriter=newXMLWriter(new

FileOutputStream("output.xml"),format);

writer.write(document);

writer.close();Dom4j在指定位置插入節(jié)點(diǎn)1.得到插入位置的節(jié)點(diǎn)列表(list)2.調(diào)用list.add(index,elemnent),由index決定element的插入位置。Element元素可以通過DocumentHelper對象得到。示例代碼:Elementaaa=DocumentHelper.createElement("aaa");aaa.setText("aaa");Listlist=root.element("書").elements();list.add(1,aaa);//更新document字符串與XML的轉(zhuǎn)換1.將字符串轉(zhuǎn)化為XML

Stringtext="<members><member>sitinspring</member></members>";

Documentdocument=DocumentHelper.parseText(text);2.將文檔或節(jié)點(diǎn)的XML轉(zhuǎn)化為字符串.

SAXReaderreader=newSAXReader();

Document

document=reader.read(new

File("input.xml"));

Elementroot=document.getRootElement();

StringdocXmlText=document.asXML();

StringrootXmlText=root.asXML();

ElementmemberElm=root.element("member");

StringmemberXmlText=memberElm.asXML();XML約束之SchemaXMLSchemaXMLSchema也是一種用于定義和描述XML文檔結(jié)構(gòu)與內(nèi)容的模式語言,其出現(xiàn)是為了克服DTD的局限性XMLSchemaVSDTD:XMLSchema符合XML語法結(jié)構(gòu)。DOM、SAX等XMLAPI很容易解析出XMLSchema文檔中的內(nèi)容。XMLSchema對名稱空間支持得非常好。XMLSchema比XMLDTD支持更多的數(shù)據(jù)類型,并支持用戶自定義新的數(shù)據(jù)類型。XMLSchema定義約束的能力非常強(qiáng)大,可以對XML實(shí)例文檔作出細(xì)致的語義限制。XMLSchema不能像DTD一樣定義實(shí)體,比DTD更復(fù)雜,但XmlSchema現(xiàn)在已是w3c組織的標(biāo)準(zhǔn),它正逐步取代DTD。Schema約束快速入門XMLSchema文件自身就是一個XML文件,但它的擴(kuò)展名通常為.xsd。一個XMLSchema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實(shí)例文檔。和XML文件一樣,一個XMLSchema文檔也必須有一個根結(jié)點(diǎn),但這個根結(jié)點(diǎn)的名稱為schema。編寫了一個XMLSchema約束文檔后,通常需要把這個文件中聲明的元素綁定到一個URI地址上,在XMLSchema技術(shù)中有一個專業(yè)術(shù)語來描述這個過程,即把XMLSchema文檔聲明的元素綁定到一個名稱空間上,以后XML文件就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪里,被誰約束。Schema入門案例<?xmlversion="1.0"encoding="UTF-8"?><xs:schemaxmlns:xs=“/2001/XMLSchema”//標(biāo)準(zhǔn)的名稱空間 targetNamespace=“http://www.”//將該schema文檔綁定到http://名稱空間 elementFormDefault="qualified"> <xs:elementname='書架'> <xs:complexType> <xs:sequence

maxOccurs='unbounded'> <xs:elementname='書'> <xs:complexType> <xs:sequence> <xs:elementname='書名'type='xs:string'/> <xs:elementname='作者'type='xs:string'/> <xs:elementname='售價'type='xs:string'/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>book.xsd文件Schema入門案例<?xmlversion="1.0"encoding="UTF-8"?><itcast:書架xmlns:itcast="http://"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation=“http://

book.xsd"> <itcast:書> <itcast:書名>JavaScript網(wǎng)頁開發(fā)</itcast:書名> <itcast:作者>張孝祥</itcast:作者> <itcast:售價>28.00元</itcast:售價> </itcast:書></itcast:書架>名稱空間的概念

在XMLSchema中,每個約束模式文檔都可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URI(UniformResourceIdentifier,統(tǒng)一資源標(biāo)識符)表示。在Xml文件中書寫標(biāo)簽時,可以通過名稱空間聲明(xmlns),來聲明當(dāng)前編寫的標(biāo)簽來自哪個Schema約束文檔。如:

<itcast:書架xmlns:itcast=“http

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論