ml語言基礎---簡單介紹_第1頁
ml語言基礎---簡單介紹_第2頁
ml語言基礎---簡單介紹_第3頁
ml語言基礎---簡單介紹_第4頁
ml語言基礎---簡單介紹_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

13、AX解析就是JDK自帶得解析方式,包括一組接口與類1) SAXB析原理以事件驅動得方式解析,即找開始結束標簽得方式SAX得工作原理簡單地說就就是對文檔進行 順序掃描,當掃描到文檔(document) 開始與結束、元素(element)開始與結束、等地方時通知事件處理函數(shù),由事 件處理函數(shù)做相應動作,然后繼續(xù)同樣得掃描,直至文檔結束。所以有兩個關鍵點:順序掃描,事件處理函數(shù)2)案例:解析指定文件(標簽無屬性),并將文件中得信息存放到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 券號 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到開始標簽public void startElement(String urir String localNamer String qNamer Artributes attributes) throws SAXExceptxcn H設置當前正在艇村的標簽.如果是對余銀標簽.則初始化Phon。對象/有可能行要設Nphone對象的反性值,取決于phone標答有沒有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/*拿到紀束標母*/public void endElement(String uri/ string localName/ string qName) throws SAXException (SystGm. out.printin (Huri : M + uri + w z localName:tf + localName + ”, qName:" 十 qName);/力果是對象限后至結束</phone),格已經(jīng)身裝好的phone對第加入到list中,干將 tag = WM;if (Hphcne,

18、1.equals (qName) ) list.add(phone);)0Overr ide/*用于處理文本節(jié)點*/public void characters(char chj int start, int Length throws SAXException /先迪裝字符串及完整的文本內(nèi)容String content = new String(chf start, length);/判斷是豆干當前的哪個標簽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)案例:解析指定文件(根標簽有屬性),并將文件中得信息存放到list 中假設:我們給每個phone加一個id屬性,那么在解析根節(jié)點得時候,就需要獲取到id信息并賦值給對象。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如果建育其他屬性,則零寫幾個)四、PULL解析在android系統(tǒng)中,很多資源文件中,很多都就是xml格式,在android系統(tǒng) 中解析這些xml得方式,就是使用pul解析器進行解析得,它與sax解析一樣, 也就是采用事件驅動進行解析得,同時,由于 android內(nèi)核已經(jīng)內(nèi)嵌了 pull,所 以我們不需要添加第三方得jar包來支持pull。1)案例:解析XML文件(不帶屬性)首先,需要 jar 包:kxm'-NNNjar具體實現(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。幅普緣的工廠對裁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) /獲鼠正在辭折的標蕓名一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ù)柱下,忻,爭取下一個事件狀態(tài)碼eventType - parser.next(): ) for (Phone p : List) System.out,pri ntln(p);)基本上跟sax得解析思路就是一樣得。幾個關鍵得方法強調下:獲取其狀態(tài)碼,區(qū)分現(xiàn)在就是哪個事件源(文檔開頭,文檔結尾,標簽開頭,標簽結尾)Rut eventType = parser.getEventType();獲取標簽名稱String tag = parser _getName(); ahir獲取標簽得文本內(nèi)容phonesetType(parser - nextText();讓指針繼續(xù)往下

溫馨提示

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

最新文檔

評論

0/150

提交評論