资料课件讲义xml课程_第1页
资料课件讲义xml课程_第2页
资料课件讲义xml课程_第3页
资料课件讲义xml课程_第4页
资料课件讲义xml课程_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲: 韩顺平XML历史 gml(1969)-sgml(1985)-html(1993)-xml(1998)主讲: 韩顺平为什么需要XML 需求1两个程序间进行数据通信? 需求2给一台服务器,做一个配置文件,当服务器程序启动时,去读取它应当的端、还有连接数据库的用户.?名和为什么需要XML需求3-红楼梦关系图: 如何让程序去理解?主讲: 韩顺平XML技术用于解决什么问题?XML语言出现还可以描述上图那种,在现实生活中经常出现的有关系的数据。在XML语言中,它允许用户自定义标签。一个 标签用于描述一段数据; 一个标签可分为开始标 签和结束标签,在开始 标签和结束标签之间, 又可以使用其它标签描

2、述其它数据,以此来实 现数据关系的描述。例如:主讲: 韩顺平XML常见应用 xml的出现解决了程序间数据传输的问题:比如qq之间的数据传送做案例进行详细讲解,用xml格式 来传送数据,具有良好的可读性性,可维护性。xml可以做配置文件xml文件做配置文件可以说非常的普遍,比如我们的tomcat服务器 的server.xml ,web.xml 。在比如我们的struts中的struts-config.xml文件,和hibernate的hibernate.cfg.xml .xml可以充当小型的数据库xml文件做小型数据库,也是不错的选择,我们程序中可能用到一 些经常要人工配置的数据,如果放在数据库

3、中读取不合适(因为你 要增加维护数据库工作),则可以考虑直接用xm来做小型数据库【比如msn中保存用户聊天记录就是用xml文件的】,而且直接读取 文件显然要比读取数据库快。主讲: 韩顺平XML语法 一个XML文件分为如下几部分内容: 文档声明元素属性注释 CDATA区 、特殊字符 处理指令(processing instruction)主讲: 韩顺平XML语法文档声明XML声明放在XML文档的第一行XML声明由以下几个部分组成:version - -文档符合XML1.0规范,我们学习1.0encoding - -文档字符编码,比如”gb2312” standalone - -文档定义是否独立使

4、用standalone=yes“standalone=“no”默认主讲: 韩顺平元素 (1)每个XML文档必须有且只有一个根元素。根元素是一个完全包括文档中其他所有元素的 元素。根元素的起始标记要放在所有其他元素的起始 标记之前。根元素的结束标记要放在所有其他元素的结束 标记之后。主讲: 韩顺平元素 (2) XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:包含标签体:不含标签体的:, 简写为: 一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:welcome to www.sohu.

5、org主讲: 韩顺平元素(3) 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。第二段:第一段:xiaomingxiaoming 由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,要特别注意。主讲: 韩顺平元素(4)命名规范 一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范: 区分大小写,例如,和是两个不同的标记。 不能以数字或_ (下划线)开头。 不能包含空格。 名称中间不能包含冒号(:)。主讲: 韩顺平属性TOM属性值用双引号()或单引号()分隔(如果属性值中有,用分隔;

6、有,用分隔)一个元素可以有多个属性,它的基本格式为:特定的属性名称在同一个元素标记中只能出现一次属性值不能包括, &主讲: 韩顺平注释 注释内容中不要出现- -; 不要把注释放在标记中间; Name TOM 注释不能嵌套; 可以在除标记以外的任何地方放注释。主讲: 韩顺平注释 Xml文件中的注释采用:“” 格式。 注意: XML声明之前不能有注释注释不能嵌套,例如:!-大段注释- 主讲: 韩顺平CDATA节有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,用于把整段文本解释为纯字符数据而不是标记的情况。包含大量、&或者字符。CDATA节中的所有字符都会被当作元素字符数据的常量部分, 而

7、不是XML标记。语法:可以输入任意字符(除外) 不能嵌套 示例主讲: 韩顺平转义字符 对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。转义符符号<&"'主讲: 韩顺平处理指令处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,XML解析引擎,应用css文件显示xml文档内容。处理指令必须以“”作为结尾,XML声明语句就是最常见的一种处理指令。主讲: 韩顺平格式正规的XML文档-小结遵循如下规则的XML文档称为格式正

8、规的XML文档:u语法规范XML声明语句必须有且仅有一个根元素标记大小写敏感属性值用引号标记成对空标记关闭元素正确嵌套主讲: 韩顺平格式正规的XML文档-小结元素语法u名称中可以包含字母、数字或者其它字符名称中不能含空格 测名称中不能含冒号(注:冒号留给命名空间使用) 测主讲: 韩顺平xml文件约束-dtddtd主讲: 韩顺平XML约束概述 什么是XML约束 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。 为什么需要XML约束问题:myclass.xml- stu-添加面积元素? 常用的约束技术 XML DTD XML Schema主讲: 韩顺平DTD约束

9、快速入门 DTD(Document Type Definition),全称为文档类型定义。DTD文件应使用UTF-8或Unicodedtd文件:myClass.dtd文件:myClass.xml周星驰23学习刻苦林青霞32是一个好学生主讲: 韩顺平编程校验XML文档正确性(xmlspy) IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM,开 发人员可以编写javascript代码,利用这个解析工具装载xml文件, 并对xml文件进行dtd验证。 创建xml文档解析器对象var xmldoc = new ActiveXObject(Microsoft.XMLDOM); 开启

10、xml校验xmldoc.validateOnParse = true; 装载xml文档xmldoc.load(book.xml); 获取错误信息xmldoc.parseError.reason;xmldoc.parseError.line主讲: 韩顺平DTD文档的声明及引用uDTD文档的声明及引用内部DTD文档!DOCTYPE 根元素外部DTD文档!DOCTYPE 根元素内外部DTD文档结合SYSTEM DTD文件路径SYSTEM DTD文件路径 定义内容主讲: 韩顺平内部dtd注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与 数据类型之间也要有

11、空格。!DOCTYPE poem根元素的名称子元素的名称及顺序子元素的数据类型 结束标签内部DTD示例王维鹿柴空山不见人,但闻人语声.返景入深林,复照青苔上.主讲: 韩顺平外部dtd外部DTD示例王维鹿柴空山不见人,但闻人语声.返景入深林,复照青苔上.主讲: 韩顺平引用DTD约束XML文件使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:当引用的文件在本地时,采用如下方式:例如: 。当引用的文件是一个公共的文件时,采用如下方式:例如:主讲: 韩顺平DTD元素(1) 语法关键字元素名称元素类型(大写)EMPTY该元素不能包含子元素和文本,但可以有属性(空

12、元素) ANY该元素可以包含任何在DTD中定义的元素内容#PCDATA可以包含任何字符数据,但是不能在其中包含任何子元素其它类型(组合)主讲: 韩顺平dtd元素(2) EMPTY示例-空元素皮诺曹皮诺曹爸爸主讲: 韩顺平dtd元素(3) ANY示例皮诺曹皮诺曹爸爸主讲: 韩顺平dtd元素(4) #PCDATA示例(放入文本)皮诺曹皮诺曹爸爸主讲: 韩顺平dtd元素(5) 组合类型示例主讲: 韩顺平修饰符,符号用途示例示例说明( )用来给元素分组(古龙|金庸|梁羽 生),(王朔|余杰), 毛毛分成三组|在列出的对象中选择一个(男人|女人)表示男人或者女人必须出现,两者至少选一+该对象最少出现一次

13、可以出现多次 (1或多次),(成员+)表示成员必须出现,而且可以出现多个成员*该对象允许出现零次到任意多次(0到多次)(爱好*)爱好可以出现零次到多次?该对象可以出现,但只能出现一次 (0到1 次)(菜鸟?)菜鸟可以出现,也可以不出现, 如果出现的话,最多只能出现一次,对象必须按指定的顺序出现(西瓜,苹果,香蕉)表示西瓜、苹果、香蕉必须出现并且按这个顺序出现主讲: 韩顺平属性定义-语法CDATA IDIDREF/IDREFS主讲: 韩顺平属性类型 CDATA 属性值可以是任何字符(包括数字和中文)主讲: 韩顺平属性类型 ID 表明该属性的取值必须是唯一的。ID属性值必须是合格的XML名字主讲:

14、 韩顺平属性类型 IDREF/IDREFS IDREF属性的值指向文档中其它地方声明的ID类型的值。 IDREFS同IDREF,但是可以具有由空格分开的多个引用。主讲: 韩顺平属性类型Enumerated 事先定义好一些值,属性的值必须在所列出的值的范围内。主讲: 韩顺平属性的特点REQUIRED 元素的所有实例都必须有该属性的值(NOT NULL) 语法: DTD 示例: XML 示例:主讲: 韩顺平属性的特点IMPLIED 元素的实例中可以忽略该属性(NULL)。 语法: DTD示例: XML示例:主讲: 韩顺平属性的特点FIXED value 元素实例中该属性的值必须为指定的固定值。 语

15、法: XML示例:主讲: 韩顺平属性的特点Default value 为属性提供一个默认的值 语法: DTD示例: XML示例:主讲: 韩顺平实体定义 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。 在DTD定义中,一条语句用于定义一个实体。 实体可分为两种类型:引用实体和参数实体。主讲: 韩顺平实体定义-引用实体 引用实体主要在 XML 文档中被应用 语法格式(dtd中定义):直接转变成实体内容 引用方式(xml中引用) &实体名称; 举例: ©right;主讲: 韩顺平实体定义参数实体 参数实体被 DTD 文件自身使用 语法格式: 引用方式:%实体

16、名称; 举例1: 举例2:.主讲: 韩顺平dtd实际操作我们具体使用一个比较复杂的dtd文件,来编写一个有效地xml,并需要验证通过.比较复杂的dtd.txt主讲: 韩顺平xml编程xml编程主讲: 韩顺平XML解析技术介绍 XML解析分为:dom解析和sax解析 dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。 sax: (Simple API for XML) 不是官方标准,但它是XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。 XML解析器() Crimson(sun)、Xerces (ibm-apa

17、che)、Aelfred2(dom4j) XML解析API(application program interface) Jaxp(sun)dom、dom4jdom主讲: 韩顺平JAXP介绍 JAXP 开发包是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包组成 在 javax.xml.parsers 包中,定义了几个工厂类,程序员调用这些工厂类,可以得到对xml文档进行解析的DOM 或 SAX 的解析器对象。主讲: 韩顺平获得JAXP中的DOM解析器步骤调用 DocumentBuilderFactory.newInstance() 方法得

18、到创建 DOM 解析器的工厂。调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。把!主讲: 韩顺平jaxp实例 为了让大家快速上手,我们实际操作一要求: 使用jaxp进行dom解析 class.xml文件.文件:myClass.xml周星驰23学习刻苦林青霞32是一个好学生把!主讲: 韩顺平jaxp实例 为了让大家快速上手,我们实际操作一要求: 使用jaxp进行dom解析 class.xml文件.文件:

19、myClass.xml周星驰23学习刻苦林青霞32是一个好学生主讲: 韩顺平DOM编程 DOM模型(document object model)DOM解析器在解析XML文档时,会把文档中的所有元素, 按照其出现的层次关系,解析成一个个Node对象(节点)。在dom中,节点之间关系如下:位于一个节点之上的节点是该节点的父节点(parent)一个节点之下的节点是该节点的子节点(children)同一层次,具有相同父节点的节点是兄弟节点(sibling) 一个节点的下一个层次的节点集合是节点后代(descendant)父、祖父节点及所有位于节点上面的,都是节点的祖先(ancestor)节点类型(下页

20、ppt)主讲: 韩顺平Node对象 Node对象提供了一系列常量来代表结点的类型,当开发人员获得某个Node类型后,就可以把Node节点转换成相应的节点对象(Node的子类对象),以便于调用其特有的方法。(查看API文档) Node对象提供了相应的方法去获得它的父结点或子结点。编程人员通过这些方法就可以读取整个XML文档的内容、或添加、修改、删除XML文档的内容了。主讲: 韩顺平更新XML文档 javax.xml.transform包中的Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出,例如把xml文件应用样式表后转成一个html文档。利用这个对象,当

21、然也可以把Document对象又重新写入到一个XML文件中。 Transformer类通过transform方法完成转换操作,该方法接收一个源和一个目的地。我们可以通过: javax.xml.transform.dom.DOMSource类来关联要转换的document对象,用javax.xml.transform.stream.StreamResult 对象来表示数据的目的地。 Transformer对象通过TransformerFactory获得。主讲: 韩顺平dom练习 练习一下,学生成绩管理系统(jaxp的dom解析)主讲: 韩顺平sax解析SAX解析主讲: 韩顺平SAX解析 在使用

22、DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构建代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果XML 文档特别大,就会消耗计算机的大量内存,严重情况下可能还会导致内存溢出。 SAX解析允许在读取文档的时候,即对文档进行处理, 而不必等到整个文档装载完才会文档进行操作。 通过继承DefaultHandler ,来开发一个sax解析器主讲: 韩顺平SAX解析机制sax是一种推式的机制,你创建一个sax 解析器,解析器在发现xml文档中的内容时就告诉你(把由程序员自己决定。推给你). 如何处理这些内容,在基于sax 的程序中,有五个最常

23、用saxstartDocument() - 告诉你解析器发现了文档的开始,告诉你解析器开始扫描文档.endDocument() - 告诉你解析器发现了文档尾startElement()-告诉你解析器发现了一个起始标签,该诉你元素的名称,该元素所有的属性名和值.character() - 告诉你解析器发现了一些文本,将得到一个字符数组, 该数组的偏移量和一个长度变量,有这三个变量你可以得到解析器所发现的文本.告endElement()- 告诉你解析器发现了一个结束标签,该你元素的名称告诉主讲: 韩顺平SAX解析 SAX采用处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:

24、解析器和处理器: 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用处理器的一个方法,解析器在调用处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给处理器。处理器由程序员编写,程序员通过处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。主讲: 韩顺平SAX方式解析XML文档 使用SAXParserFactory创建SAX解析工厂SAXParserFactory spf = SAXParserFac

25、tory.newInstance(); 通过SAX解析工厂得到解析器对象SAXParser sp = spf.newSAXParser(); 将解析对象和处理器对象关联sp.parse(src/myClass.xml, new MyHander();主讲: 韩顺平SAX实例我们使用sax技术来解析一个xml文档,从中我们可以看到sax是如何使用的。文件:myClass.xml周星驰23学习刻苦林青霞32是一个好学生主讲: 韩顺平DOM4J解析XML文档Dom4j是一个简单、灵活的开放源代码的库。Dom4j 是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和

26、抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM 更好的灵活性。Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXP 也用了Dom4j。使用Dom4j开发,需下载dom4j相应的jar文件。主讲: 韩顺平Document对象 DOM4j中,获得Document对象的方式有三种: 开发dom4j要加入新jar包,并且在倒包时要导入dom4j的包1. 读取XML文件,获得document对象SAXReader reader = new SAXReader()

27、;Documentdocument = reader.read(new File(“src/input.xml);2.解析XML形式的文本,得到document对象.String text = ;Document document = DocumentHelper.parseText(text);3.主动创建document对象.Document document = DocumentHelper.createDocument();/创建根节点Element root = document.addElement(members);主讲: 韩顺平节点对象 1.获取文档的根节点.Element r

28、oot = document.getRootElement(); 2.取得某个节点的子节点.Element element=node.element(“书名); 3.取得节点的文字String text=node.getText();主讲: 韩顺平dom4j快速入门/1遍历整个xml文件public static void list(Element e) System.out.println(e.getName()+e.getText().trim(); Iterator it=e.elementIterator();while(it.hasNext()Element element=(Ele

29、ment) it.next();list(element);/1.读取xml的某个标签内容(比如,读取第一个学生的名字) public static void read(Document doc)Element stu=doc.getRootElement().element(名字); Element name=stu.element( 名 字 ); System.out.println(stu.getText();文件:myClass.xml周星驰23学习刻苦林青霞32是一个好学生主讲: 韩顺平dom4j快速入门/3.添加xml标签(加入一个学生)public static void add

30、(Document doc) throws IOException/1.创建一个元素Element e=DocumentHelper.createElement(学生);/e.setText(贾宝玉);/在学生标签下,加入名字Element name=DocumentHelper.createElement(名字);name.setText(小/2.挂到根元素下);e.add(name);doc.getRootElement().add(e);/3.更新文档.OutputFormatoutput=OutputFormat.createPrettyPrint();output.setEncodi

31、ng(utf-8);/分析/XMLWriter writer=new XMLWriter(new FileWriter(src/myClass.xml),output);/一种解决乱码的方法/*XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(src/myClass.xml),utf-8),output);*/第二种方法解决乱码XMLWriter writer=new XMLWriter(new FileOutputStream(new File(src/myClass.xml

32、),output);writer.write(doc);writer.close();文件:myClass.xml周星驰23学习刻苦林青霞32是一个好学生主讲: 韩顺平将文档写入XML文件 1.文档中全为英文,不设置编码,直接写入的形式.XMLWriter writer = new XMLWriter(newFileWriter(output.xml);writer.write(document); writer.close(); 2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint();/ 指定X

33、ML编码format.setEncoding(GBK);XMLWriter writer = new XMLWriter(newFileWriter(output.xml),format); writer.write(document);writer.close();出 现 乱 码 . new OutputStreamWriter(new FileOutputStream(src/myClass.xml),utf-8)主讲: 韩顺平节点对象 4.取得某节点下所有名为“member”的子节点,并进行遍历.List nodes = rootElm.elements(member);for (Ite

34、rator it = nodes.iterator(); it.hasNext();) Element elm = (Element) it.next();/ do something 5.对某节点下的所有子节点进行遍历.for(Iterator it=root.elementIterator();it.hasNext();)Element element = (Element) it.next();/ do something 6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement(age);主讲: 韩顺平节点对象 7. 设 置 节 点 文

35、 字 . element.setText(29); 8.删除某节点./childElm是待删除的节点,parentElm是其父节点parentElm.remove(childElm); 9.添加一个CDATA节点.Element contentElm =infoElm.addElement(content); contentElm.addCDATA(diary.getContent();主讲: 韩顺平节点对象属性 1.取得某节点下的某属性Element root=document.getRootElement();/属性名nameAttribute attribute=root.attribute(size); 2.取得属性的文字String text=attribute.getText(); 3.删除某属性Attribute attribute=root.attribute(size);root.remove(attribute);主讲: 韩顺平节点对象属性 3.遍历某节点的所有属性Element root=document.getRootElement();for(Iterator it=root.attributeIterator();it.hasNext();) Attribute attribute = (Attribute) it.next();Str

温馨提示

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

评论

0/150

提交评论