ml语言基础---简单介绍_第1页
ml语言基础---简单介绍_第2页
ml语言基础---简单介绍_第3页
ml语言基础---简单介绍_第4页
ml语言基础---简单介绍_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、XML解析、XML基础1)什么就是XML(Einux ,xml的作用:1.存储数据RJ用于跨平台数掘交回统一的数庭资源:Window) _jTXMLJStxt又件2欧阴晴web开发5曲框架 训KkQid配署文件whang 旬 n |20|138363534txt 文件(特点:存储内容少,解析筒单.可读性差)xm收件(特点;可博科通,结构清晰,存储内容察,解析麻烦) w students >< students<nanr»e>zhang$an</name>age>20</age></student></ftuden

2、tsXML就是指可扩展标记语言(extensible Markup Language),它也就是一种标记语言,很类似HTML它被设计得宗旨就是 存储数据,而非显示数据Html展示数据XMLfe签没有被预定义,需要用户自行定义标签。XMLfe术就是 W3C&织(World Wide Web Consortium 万维网联盟)发布得, 目前遵循得就是 W3C&织于2000年发布得XML1 0规范。XMLM广泛认为就是继Java之后在Internet上最激动人心得新技术。W3CSchool(入门级)2) XML常见应用用于数据存储用在软件配置,用于描述模块之间得关系(如果著名得Str

3、uts、Spring与Hibernate都就是基于XML乍为配置文件得-SSH) android都就是xml。图 形界面都就是用得xml在一个软件系统中,通过XML配置文件可以提高系统得灵活性。即程序得行 为就是通过XMa件来配置得,而不就是硬编码。XMLM是一种通用得数据交换格式。(跨平台)、XML语法语法较多,建议先直接上手写案例,成功之后再回来当回顾学习用一个XML文件主要包括以下几个部分:文档声明元素属性注释实体引用及CDATA:处理指令(PI:Processing Instruction )Xml约束1)文档声明在编写XML±档时,需要先使用文档声明来声明 XML文档。且必

4、须出现在文档得第一行。(前面注释都不允许)最简单得语法:<?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文件中出现得标签。一个标签分为起始与结束标签(不能省略)。一个标签有如下几种书写形式:包含标签主体:<mytag>some content</mytag>不含标签主体:<mytag />(有时也叫空标签)一个标签中可以嵌套若干子标签,但所有标签必须合理得嵌套,不允许有交叉嵌套。<mytag1><mytag2></mytag1></mytag2>一个XML±档必须有且仅有一个根标签,其她标签都就是这个根标签得子标 签或孙标签。对于XMLB签中出现得所有空格与换行,XML解析程序都会当作标签内容进行

6、处理。例如:下面两段内容得意义就是不一样得。<网址>ww、1000phone、copm</网址>网址ww、1000phone、copm</网址>-DOM 解析由于在XML中,空格与换行都作为原始内容被处理,所以,在解析XML±件时要特殊处理下,绕过这些空格与换行符。元素命名规范:一个XMLE素可以包含字母、数字以及其它一些可见字符,但必须遵守下面得一些规范区分大小写,例如,<A>W <2>就是两个不同彳#标记。(与java、c变量命名一致)不能以数字或“_"(下划线)开头。不能以xml(或XML或Xml等)开头。(

7、xml为关键字,所以不能重复)不能包含空格。名称中间不能包含冒号(:)。一句话:像个正常人一样去写名称就行,不用关键字3)属性一个元素可以有多个属性,每个属性都有它自己得名称与取值,例如:<mytagname= "value" />属性值一定要用引号(单引号或双引号)引起来。属性名称得命名规范与元素得命名规范相同元素中属性没有顺序要求,但就是不准重复。在XMLfe术中,标签属性所代表得信息也可以被改成用子元素得形式来描述4)注释XML中得注释语法为:<!-这就是注释->注意:XM/明之前不能有注释(xml声明必须放在文档第一行)注释不能嵌套5)实体引

8、用及CDATAK实体引用在XML中,一些字符拥有特殊得意义。如果您把字符"<"放在XML元素中,会发生错误,这就是因为解析器会把它当作新元素得开始。如下这样会产生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解析器进行解析得文本数据(UnparsedCharacter Data )。在XML元素中,"<"与"&"就是非法得。"<"会产生错误,因为解析器会把该字符解释为新元素得开始。&q

10、uot;&"也会产生错误,因为解析器会把该字符解释为字符实体得开始。某些文本,比如JavaScript代码,包含大量"<"或"&"字符。为了避免错误, 可以将脚本代码定义为CDATACDATA&B分中得所有内容都会被解析器忽略。CDATAgB分由“<!CDATA” 开始,由">" 结束:6)处理指令(了解即可)处理指令,简称 PI(Processing Instruction) 。作用:用来指挥软件如何解析XMLt档。语法:必须以“ <?”作为开头,以“ ?>”作为结尾。

11、常用处理指令:XM/明:<?xml version= "1、0" encoding= "GB2312 ?>xml-stylesheet 指令:作用:指示 XMLt档所使用得CSS羊式XSLT7) XMLI勺束(了解即可)为什么需要约束:XML都就是用户自定义得标签,若出现小小得错误,软件程序将不能正确地获取文件中得内容而报错。什么就是XML勺束:约束文档定义了在XML中允许出现得元素名称、属性及元素出现得顺序等等。在XMLfe术里,可以编写一个文档来约束一个 XML±档得书写规范,这称之为XML勺束。常用得约束技术 XML DTD, XML

12、Schema作为普通工程师,一般就是使用别人得约束文件,而不会自己去写约束。例如使用SSH1架开始时用到得xml文件,均要受框架得提供得xml得约束文件得约束二、SAX解析XML解析方式主要有:DOM (文档对象模型):将整个文件以树得结构存储到内存中,适合小文件,程序可读性高。Dom4jDOMSAX (基于事件流得解析): 省内存,程序可读性相比上述较差。PULL (Android自带解析器):也就是基于事件流得解析本次,我们只学习SAX与PULL两种方式 正式来学习SAX解析Simple APIs for XML , XML 简单应用程序接口,在 javax、xml、parsers包中,S

13、AX解析就是JDK自带得解析方式,包括一组接口与类1) SAXB析原理以事件驱动得方式解析,即找开始结束标签得方式SAX得工作原理简单地说就就是对文档进行 顺序扫描,当扫描到文档(document) 开始与结束、元素(element)开始与结束、等地方时通知事件处理函数,由事 件处理函数做相应动作,然后继续同样得扫描,直至文档结束。所以有两个关键点:顺序扫描,事件处理函数2)案例:解析指定文件(标签无属性),并将文件中得信息存放到list 中-需要先创建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),格已经身装好的phone对第加入到list中,干将 tag = WM;if (Hphcne,

18、1.equals (qName) ) list.add(phone);)0Overr ide/*用于处理文本节点*/public void characters(char chj int start, int Length throws SAXException /先迪装字符串及完整的文本内容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属性,那么在解析根节点得时候,就需要获取到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系统中,很多资源文件中,很多都就是xml格式,在android系统 中解析这些xml得方式,就是使用pul解析器进行解析得,它与sax解析一样, 也就是采用事件驱动进行解析得,同时,由于 android内核已经内嵌了 pull,所 以我们不需要添加第三方得jar包来支持pull。1)案例:解析XML文件(不带属性)首先,需要 jar 包:kxm'-NNNjar具体实现步骤如下

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. 二上尸由丁:七工尸口口七口工y .门后8工门打士口门匚口。; /电遑pull修班骷Kn 1 PulLParser parser - factory-newPullIParsei (>/徜定数檐海.辉力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 ():获取帝案中的文本内容 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;)/碓续柱下,忻,争取下一个事件状态码eventType - parser.next(): ) for (Phone p : List) System.out,pri ntln(p);)基本上跟sax得解析思路就是一样得。几个关键得方法强调下:获取其状态码,区分现在就是哪个事件源(文档开头,文档结尾,标签开头,标签结尾)Rut eventType = parser.getEventType();获取标签名称String tag = parser _getName(); ahir获取标签得文本内容phonesetType(parser - nextText();让指针继续往下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论