ml語(yǔ)言基礎(chǔ)---簡(jiǎn)單介紹_第1頁(yè)
ml語(yǔ)言基礎(chǔ)---簡(jiǎn)單介紹_第2頁(yè)
ml語(yǔ)言基礎(chǔ)---簡(jiǎn)單介紹_第3頁(yè)
ml語(yǔ)言基礎(chǔ)---簡(jiǎn)單介紹_第4頁(yè)
ml語(yǔ)言基礎(chǔ)---簡(jiǎn)單介紹_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、XML解析、XML基礎(chǔ)1)什么就是XML(Einux ,xml的作用:1.存儲(chǔ)數(shù)據(jù)RJ用于跨平臺(tái)數(shù)掘交回統(tǒng)一的數(shù)庭資源:Window) _jTXMLJStxt又件2歐陰晴web開發(fā)5曲框架 訓(xùn)KkQid配署文件whang 旬 n |20|138363534txt 文件(特點(diǎn):存儲(chǔ)內(nèi)容少,解析筒單.可讀性差)xm收件(特點(diǎn);可博科通,結(jié)構(gòu)清晰,存儲(chǔ)內(nèi)容察,解析麻煩) w students >< students<nanr»e>zhang$an</name>age>20</age></student></ftuden

2、tsXML就是指可擴(kuò)展標(biāo)記語(yǔ)言(extensible Markup Language),它也就是一種標(biāo)記語(yǔ)言,很類似HTML它被設(shè)計(jì)得宗旨就是 存儲(chǔ)數(shù)據(jù),而非顯示數(shù)據(jù)Html展示數(shù)據(jù)XMLfe簽沒有被預(yù)定義,需要用戶自行定義標(biāo)簽。XMLfe術(shù)就是 W3C&織(World Wide Web Consortium 萬維網(wǎng)聯(lián)盟)發(fā)布得, 目前遵循得就是 W3C&織于2000年發(fā)布得XML1 0規(guī)范。XMLM廣泛認(rèn)為就是繼Java之后在Internet上最激動(dòng)人心得新技術(shù)。W3CSchool(入門級(jí))2) XML常見應(yīng)用用于數(shù)據(jù)存儲(chǔ)用在軟件配置,用于描述模塊之間得關(guān)系(如果著名得Str

3、uts、Spring與Hibernate都就是基于XML乍為配置文件得-SSH) android都就是xml。圖 形界面都就是用得xml在一個(gè)軟件系統(tǒng)中,通過XML配置文件可以提高系統(tǒng)得靈活性。即程序得行 為就是通過XMa件來配置得,而不就是硬編碼。XMLM是一種通用得數(shù)據(jù)交換格式。(跨平臺(tái))、XML語(yǔ)法語(yǔ)法較多,建議先直接上手寫案例,成功之后再回來當(dāng)回顧學(xué)習(xí)用一個(gè)XML文件主要包括以下幾個(gè)部分:文檔聲明元素屬性注釋實(shí)體引用及CDATA:處理指令(PI:Processing Instruction )Xml約束1)文檔聲明在編寫XML±檔時(shí),需要先使用文檔聲明來聲明 XML文檔。且必

4、須出現(xiàn)在文檔得第一行。(前面注釋都不允許)最簡(jiǎn)單得語(yǔ)法:<?xml version= "1、0” ?>用encoding屬性說明文檔所使用得字符編碼。保存在磁盤上得文件編碼要 與聲明得編碼一致。如:<?xml version= "1、0” encoding= "utf-8 ” ?>用standalone屬性說明文檔就是否獨(dú)立,即就是否依賴其她文檔。如:<?xml version= "1、0” encoding= "utf-8 " standalone= "yes” ?>2)元素XML元素指

5、XML文件中出現(xiàn)得標(biāo)簽。一個(gè)標(biāo)簽分為起始與結(jié)束標(biāo)簽(不能省略)。一個(gè)標(biāo)簽有如下幾種書寫形式:包含標(biāo)簽主體:<mytag>some content</mytag>不含標(biāo)簽主體:<mytag />(有時(shí)也叫空標(biāo)簽)一個(gè)標(biāo)簽中可以嵌套若干子標(biāo)簽,但所有標(biāo)簽必須合理得嵌套,不允許有交叉嵌套。<mytag1><mytag2></mytag1></mytag2>一個(gè)XML±檔必須有且僅有一個(gè)根標(biāo)簽,其她標(biāo)簽都就是這個(gè)根標(biāo)簽得子標(biāo) 簽或?qū)O標(biāo)簽。對(duì)于XMLB簽中出現(xiàn)得所有空格與換行,XML解析程序都會(huì)當(dāng)作標(biāo)簽內(nèi)容進(jìn)行

6、處理。例如:下面兩段內(nèi)容得意義就是不一樣得。<網(wǎng)址>ww、1000phone、copm</網(wǎng)址>網(wǎng)址ww、1000phone、copm</網(wǎng)址>-DOM 解析由于在XML中,空格與換行都作為原始內(nèi)容被處理,所以,在解析XML±件時(shí)要特殊處理下,繞過這些空格與換行符。元素命名規(guī)范:一個(gè)XMLE素可以包含字母、數(shù)字以及其它一些可見字符,但必須遵守下面得一些規(guī)范區(qū)分大小寫,例如,<A>W <2>就是兩個(gè)不同彳#標(biāo)記。(與java、c變量命名一致)不能以數(shù)字或“_"(下劃線)開頭。不能以xml(或XML或Xml等)開頭。(

7、xml為關(guān)鍵字,所以不能重復(fù))不能包含空格。名稱中間不能包含冒號(hào)(:)。一句話:像個(gè)正常人一樣去寫名稱就行,不用關(guān)鍵字3)屬性一個(gè)元素可以有多個(gè)屬性,每個(gè)屬性都有它自己得名稱與取值,例如:<mytagname= "value" />屬性值一定要用引號(hào)(單引號(hào)或雙引號(hào))引起來。屬性名稱得命名規(guī)范與元素得命名規(guī)范相同元素中屬性沒有順序要求,但就是不準(zhǔn)重復(fù)。在XMLfe術(shù)中,標(biāo)簽屬性所代表得信息也可以被改成用子元素得形式來描述4)注釋XML中得注釋語(yǔ)法為:<!-這就是注釋->注意:XM/明之前不能有注釋(xml聲明必須放在文檔第一行)注釋不能嵌套5)實(shí)體引

8、用及CDATAK實(shí)體引用在XML中,一些字符擁有特殊得意義。如果您把字符"<"放在XML元素中,會(huì)發(fā)生錯(cuò)誤,這就是因?yàn)榻馕銎鲿?huì)把它當(dāng)作新元素得開始。如下這樣會(huì)產(chǎn)生XML錯(cuò)誤:<message>if salary < 1000 then</message>為了避免此類錯(cuò)誤,需要把字符"<"替換為實(shí)體引用,就像這樣:<message>if salary &lt; 1000 then</message>在XML中有5個(gè)預(yù)定義得實(shí)體引用:&lt;<小于&gt;>

9、大于&amp;&與號(hào)&apos;'省略號(hào)&quot;"引號(hào)注意:嚴(yán)格地講,在XML中僅有字符"<"與"&"就是非法得。省略號(hào)、引號(hào)與大于號(hào)就是合法得,但就是把它們替換為實(shí)體引用就是個(gè)好得習(xí)慣。CDATM術(shù)語(yǔ)CDATA指得就是不應(yīng)由XML解析器進(jìn)行解析得文本數(shù)據(jù)(UnparsedCharacter Data )。在XML元素中,"<"與"&"就是非法得。"<"會(huì)產(chǎn)生錯(cuò)誤,因?yàn)榻馕銎鲿?huì)把該字符解釋為新元素得開始。&q

10、uot;&"也會(huì)產(chǎn)生錯(cuò)誤,因?yàn)榻馕銎鲿?huì)把該字符解釋為字符實(shí)體得開始。某些文本,比如JavaScript代碼,包含大量"<"或"&"字符。為了避免錯(cuò)誤, 可以將腳本代碼定義為CDATACDATA&B分中得所有內(nèi)容都會(huì)被解析器忽略。CDATAgB分由“<!CDATA” 開始,由">" 結(jié)束:6)處理指令(了解即可)處理指令,簡(jiǎn)稱 PI(Processing Instruction) 。作用:用來指揮軟件如何解析XMLt檔。語(yǔ)法:必須以“ <?”作為開頭,以“ ?>”作為結(jié)尾。

11、常用處理指令:XM/明:<?xml version= "1、0" encoding= "GB2312 ?>xml-stylesheet 指令:作用:指示 XMLt檔所使用得CSS羊式XSLT7) XMLI勺束(了解即可)為什么需要約束:XML都就是用戶自定義得標(biāo)簽,若出現(xiàn)小小得錯(cuò)誤,軟件程序?qū)⒉荒苷_地獲取文件中得內(nèi)容而報(bào)錯(cuò)。什么就是XML勺束:約束文檔定義了在XML中允許出現(xiàn)得元素名稱、屬性及元素出現(xiàn)得順序等等。在XMLfe術(shù)里,可以編寫一個(gè)文檔來約束一個(gè) XML±檔得書寫規(guī)范,這稱之為XML勺束。常用得約束技術(shù) XML DTD, XML

12、Schema作為普通工程師,一般就是使用別人得約束文件,而不會(huì)自己去寫約束。例如使用SSH1架開始時(shí)用到得xml文件,均要受框架得提供得xml得約束文件得約束二、SAX解析XML解析方式主要有:DOM (文檔對(duì)象模型):將整個(gè)文件以樹得結(jié)構(gòu)存儲(chǔ)到內(nèi)存中,適合小文件,程序可讀性高。Dom4jDOMSAX (基于事件流得解析): 省內(nèi)存,程序可讀性相比上述較差。PULL (Android自帶解析器):也就是基于事件流得解析本次,我們只學(xué)習(xí)SAX與PULL兩種方式 正式來學(xué)習(xí)SAX解析Simple APIs for XML , XML 簡(jiǎn)單應(yīng)用程序接口,在 javax、xml、parsers包中,S

13、AX解析就是JDK自帶得解析方式,包括一組接口與類1) SAXB析原理以事件驅(qū)動(dòng)得方式解析,即找開始結(jié)束標(biāo)簽得方式SAX得工作原理簡(jiǎn)單地說就就是對(duì)文檔進(jìn)行 順序掃描,當(dāng)掃描到文檔(document) 開始與結(jié)束、元素(element)開始與結(jié)束、等地方時(shí)通知事件處理函數(shù),由事 件處理函數(shù)做相應(yīng)動(dòng)作,然后繼續(xù)同樣得掃描,直至文檔結(jié)束。所以有兩個(gè)關(guān)鍵點(diǎn):順序掃描,事件處理函數(shù)2)案例:解析指定文件(標(biāo)簽無屬性),并將文件中得信息存放到list 中-需要先創(chuàng)建XML文件public 匕上疝其零(p心13。String 1 看上口白) thrcwF F4izaerCcjifigaintl9n£

14、;ic«t?tiQrLrgAXExe靜Mio凱* raEMption (/J劃*3#X掣花H工廠5AXFar3«FaGtQcy Xactcxy -h newlnj;Ua5AX*F靠SAXPars«r parser - factory.newAXkars«r(>M 乳渾1harLd . AF -白:口+-i -£7 中 ,L ''" M 券號(hào) 1parser, parse ( nvv File ( ncnv t,kitiL" T handlerl ;|(* PX?隴案Li3tcph 0!:=> ph

15、 one b 占 hanidLr .qstLLBt (1;fPh SD-ii p : phones) rsystfirftur: .print n:public class MyHandler extends DefaultHandler private List<Phone> list;private String tag;private Phone phone:Overridepublic void startDocument() throws SAXException I /初始化list list = new ArxayList<Phone>();Overrid

16、e/* M到開始標(biāo)簽public void startElement(String urir String localNamer String qNamer Artributes attributes) throws SAXExceptxcn H設(shè)置當(dāng)前正在艇村的標(biāo)簽.如果是對(duì)余銀標(biāo)簽.則初始化Phon。對(duì)象/有可能行要設(shè)Nphone對(duì)象的反性值,取決于phone標(biāo)答有沒有W住System.out.printIn(nuri:n + uri + w,localMame:n + localName + nr qName: + qName);tag = qName;if (MphoneM.equal

17、s(tag) phone - new Phone(>)0Override/*拿到紀(jì)束標(biāo)母*/public void endElement(String uri/ string localName/ string qName) throws SAXException (SystGm. out.printin (Huri : M + uri + w z localName:tf + localName + ”, qName:" 十 qName);/力果是對(duì)象限后至結(jié)束</phone),格已經(jīng)身裝好的phone對(duì)第加入到list中,干將 tag = WM;if (Hphcne,

18、1.equals (qName) ) list.add(phone);)0Overr ide/*用于處理文本節(jié)點(diǎn)*/public void characters(char chj int start, int Length throws SAXException /先迪裝字符串及完整的文本內(nèi)容String content = new String(chf start, length);/判斷是豆干當(dāng)前的哪個(gè)標(biāo)簽if (*1:ypF?" .ecjual3 (tag) ) phone -setType(content); else if ( "tJiice*' 

19、1;equ<iL=t (titg) ) phone , set:Pr ce (Ini:eqer .t (content); else if ("store",equal3tag) phonts . ”婦tS =01.v (Inteyj. *戶d上 smli; L (content);public Li5t<Ptione> qetLi st: () return 1j st;3)案例:解析指定文件(根標(biāo)簽有屬性),并將文件中得信息存放到list 中假設(shè):我們給每個(gè)phone加一個(gè)id屬性,那么在解析根節(jié)點(diǎn)得時(shí)候,就需要獲取到id信息并賦值給對(duì)象。Overr1

20、 dspublic void st artEl(String , String lacalNmA, St ri ngrAttributes attributes) throws SAXExceptLon tay - qName; / :三量三丁* 厘if ("phone,h. equals (tag) ) 三 一 n.M11 :if (attributes != null) /;劉二:,是有行三目for (int i = 0; i < att r ibute3. getLength () ; i-+-+) String name = attributes,getQName(1)

21、r String value = attributes *geLVslue(iH if(n«me) phone.setldvaIuc); )H如果建育其他屬性,則零寫幾個(gè))四、PULL解析在android系統(tǒng)中,很多資源文件中,很多都就是xml格式,在android系統(tǒng) 中解析這些xml得方式,就是使用pul解析器進(jìn)行解析得,它與sax解析一樣, 也就是采用事件驅(qū)動(dòng)進(jìn)行解析得,同時(shí),由于 android內(nèi)核已經(jīng)內(nèi)嵌了 pull,所 以我們不需要添加第三方得jar包來支持pull。1)案例:解析XML文件(不帶屬性)首先,需要 jar 包:kxm'-NNNjar具體實(shí)現(xiàn)步驟如下

22、:public 亡1收,3 PullParserTesxl (poktlf 七C void flka iii (Str 1 n Z| ( J) 七 He 占Hh JCmlPcLLPi r = etEx.CeptiOrt(lOExctLion (/倒It pul。幅普緣的工廠對(duì)裁Xml LPa rsef Fac-tazy factQjy = Xlm. 二上尸由?。浩吖な诳谄呖诠 .門后8工門打士口門匚口。; /電遑pull修班骷Kn 1 PulLParser parser - factory-newPullIParsei (>/徜定數(shù)檐海.輝力phone仃 mlpfl47.= e jr

23、» aetlnput ( naw Fi leE eade c (, Hinl " ) ) Ff !品取寺附或古瑪.在開筆氣府才而言失耗股一次ini tType , parser I:vntTyp );/鬲壞褲朽.宜憲M件事所造1».Liat<Phone> liat - null;Pin one phone nu.ll;while (eventType != Xml Pull Fa rser ED_ DOC LAMENT) /獲鼠正在辭折的標(biāo)蕓名一Str5 ng t曰g = parser.getNeme();switch (eventType) case

24、 XmlPijlLParser. 5TAF.T_DOCUiErr: list = new ATTyList<Phone> ; braa-k ;case Xml Pul I Parser -T71G:if ('"phcne .equals (tag)( phone = new Fhone();I else £f (1(typeh, ,equals tag)(/ / parser .next! ext ():獲取帝案中的文本內(nèi)容 phone.setType(parser» nextText();1 «ls4 if ("price

25、1'» equals < tag) phone .setPrice (Integer .parseZn t (parser .nextText ();else if (nstorefl.equals(tag) phone . setStore(Integer pqrselntiparser *nextTeKt()i break;case XmlPulLParser .二?13:if (phons'1 *ecjual5 (tag) ) list,add(phone);) bfeak;)/碓續(xù)柱下,忻,爭(zhēng)取下一個(gè)事件狀態(tài)碼eventType - parser.next(): ) for (Phone p : List) System.out,pri ntln(p);)基本上跟sax得解析思路就是一樣得。幾個(gè)關(guān)鍵得方法強(qiáng)調(diào)下:獲取其狀態(tài)碼,區(qū)分現(xiàn)在就是哪個(gè)事件源(文檔開頭,文檔結(jié)尾,標(biāo)簽開頭,標(biāo)簽結(jié)尾)Rut eventType = parser.getEventType();獲取標(biāo)簽名稱String tag = parser _getName(); ahir獲取標(biāo)簽得文本內(nèi)容phonesetType(parser - nextText();讓指針繼續(xù)往下

溫馨提示

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

評(píng)論

0/150

提交評(píng)論