ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:73.04KB ,
资源ID:12177481      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12177481.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(XML学习笔记.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

XML学习笔记.docx

1、XML学习笔记XML学习笔记Java相关课程系列笔记之五笔记内容说明XML(范传奇老师主讲,占笔记内容100%);目 录一、 XML基本语法 11.1 XML介绍 11.2 XML元素 11.3 XML属性 11.4实体引用 11.5 CDATA段 21.6 DTD声明元素 21.7 DTD声明元素:声明空元素 31.8 DTD声明元素:含有PCDATA 31.9 DTD声明元素:带有子元素(子元素列表)的元素 31.10 DTD声明元素:声明只出现一次的元素 41.11 DTD声明元素:声明可多次出现的元素 41.12 DTD声明元素:子元素只能是其中之一的情况 41.13 DTD声明元素:

2、子元素可以是元素也可以是文本 41.14 DTD声明元素:总结 51.15 DTD中声明元素的属性 51.16属性类型 51.17属性值的约束 51.18 DTD命名空间介绍 5二、 Schema简介 62.1 Schema的作用 62.2 Schema文件的扩展名xsd 6三、 Java解析XML 73.1 Java与XML共同点 73.2 Java解析XML有两种方式 73.3 JDOM/DOM4J 73.4 DOM解析 73.5 SAX解析 73.6案例:使用DOM4J包的核心API解析xml文件 73.7案例:使用DOM4J包的核心API写入xml文件 9四、 XPath语言 114.

3、1 XPath基本介绍 114.2使用XPath的好处 114.3 XPath基本语法 114.4 DOM4J对XPath的支持 11五、 附db_info.xml文件 121、XML基本语法1.1 XML介绍1)XML是可扩展标记语言(EXtensible Markup Language)。2)XML是独立于软件和硬件的信息传输工具。3)XML是以文本的形式存在于一个文本文件中的,一般该文件的后缀名就是“.xml”,例如:user.xml。4)XML的设计宗旨是传输信息(尤其是结构比较复杂的数据),而不是显示数据。5)XML可以描绘树状结构的数据。因为这个特点,除了传输数据外,更多时候我们使

4、用XML作为配置文件。6)XML是一种标记语言,很类似HTML。7)XML标签没有预先定义,需要自行定义标签。8)XML被设计为具有自我描述性。9)XML是W3C推荐的标准(W3C,万维网联盟,World Wide Web Consortium,这个建立于1994年的组织,其宗旨是通过促进通用协议的发展并确保其通用型,以激发web世界的全部潜能)。10)XML注释:1.2 XML元素1)XML文档包含XML元素。2)XML元素指的是从开始标签(包含)到结束标签(包含)的部分。3)元素可包含其他元素(标签嵌套使用)、文本或者两者的混合物。4)元素也可以拥有属性。例如:XML文件内容都是标签,标签

5、是成对出现的。1.3 XML属性1)XML元素可以在开始标签中包含属性(即属性是在前标签中定义的),属性(Attribute)通常不是用于保存数据的,而是用于设定、描述标签的一些特征,是提供关于元素的额外(附加)信息的。属性通常提供不属于数据组成部分的信息,但是对需要处理这个元素的应用程序来说却很重要。 注意事项:v 属性必须是属性名=属性值的形式。v 元素可以包含元素,但是不能交叉使用!嵌套关系必须完整。2)XML属性的属性值必须使用引号,单引号或双引号“”都可以!如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。例如:oracle user=chang的连接 id

6、=sss3)在标签名的后面可以定义若干个属性,每个属性间应该以空格隔开。1.4实体引用为了解决属性值中使用XML中的特殊字符,我们可以使用类似的转义字符去描述。字符被替换为转移字符(实体引用)>&'" 注意事项:v 文本中也不能有特数字符。v 实际上,在属性值中&和是合法的),必须要转义。其余的可以不用,但是更好的习惯是遇到这种在XML中有特殊含义的字符时都使用转义去表达。1.5 CDATA段在某些情况下,我们在xml中要使用大量XML敏感的字符,而我们又不希望逐一的对其进行转移。这时候使用CDATA段是最理想的。1)语法格式:2)在CDATA中将文本的内容写

7、入,那么这段文本内容会被忽略检查,无论里面是否包含XML敏感内容,全部被当作普通的文本去看待。例如: ! CDATA function sayhello() alert(hello!); 3)行业内交换数据时要求xml文件格式相同,所以需要大家遵守规范的xml文件格式,比如两份xml文件要有相同的元素嵌套关系、相同的属性定义、相同的元素顺序、元素出现相同的次数等。如下为两份相同数据,但是结构不同的xml文件,无法交换数据 1.6 DTD声明元素1)在一个DTD中,元素通过元素声明来进行声明(用于声明和约束元素)。 注意事项:XML只允许有一个根标记(根节点)。2)DTD声明元素语法: 注意事项

8、:若使用DTD声明了元素(也可说使用了DTD验证),那么在xml中只能使用被声明过的元素,包括元素下的子元素。不能使用不在DTD中声明的元素了。1.7 DTD声明元素:声明空元素即声明一个空标签,标签中不含有任何内容。例如:对应:或 注意事项:简写:通常xml中若没有后标记可以这样作,html中被大量使用。前提是标签中没内容!1.8 DTD声明元素:含有PCDATA定义元素中的内容为文本内容(写什么都可以)。1)语法:例如:对应:chang或 注意事项:PCDATA是会被解析器解析的文本,这些文本将被解析器检查实体以及标记。2)这时候page标签中只能出现文本内容,但要注意,该文本内容是需要检

9、查的,就是说不能出现XML敏感字符。 70这样不行! !CDATA 7这样可以1.9 DTD声明元素:带有子元素(子元素列表)的元素即约束标签中出现标签,或者说约束元素中有子元素。1)语法:2)在声明当前元素所包含的子元素时,我们要在下面声明出这些子元素!例如: 上面的声明表示有一个叫jdbc的标签,它其中只能包含两个标签,分别是oracle和mysql,而这两个标签也声明了,它们的内容可以是任意文本。对应: chang boooo 注意事项:jdbc标签中oracle和mysql的出现顺序必须与jdbc声明的元素的顺序一致!错误一: boooo这样就不行! chang 错误二: lalala

10、 ooooo ooooo这样就不行!只能出现1次! 1.10 DTD声明元素:声明只出现一次的元素1)语法:例如:对应: 3 2)上例声明了prev子元素必须出现一次,并且必须只在“page”元素中出现一次。1.11 DTD声明元素:声明可多次出现的元素对于在子元素中出现的次数,DTD也有规范,不支持具体数,但支持量词。1)子元素可以出现的量词:?0-1*0-多次+1-多次 例如: 注意事项:v 使用了以上的量词的话,子元素出现顺序就不是必须一致了。v 没用量词,则子元素必须出现且1次,且出现顺序必须与声明的元素的顺序一致!1.12 DTD声明元素:子元素只能是其中之一的情况例如: 对应: a

11、bc 注意事项:与就是直接用“,”逗号,如1.13 DTD声明元素:子元素可以是元素也可以是文本定义标签中的子元素可以是元素也可以是文本。例如:1.14 DTD声明元素:总结类型名称类型说明CDATA值为字符数据(en1 | en2 | .)值为枚举列表中的一个值ID值为唯一的IDIDREF值为另外一个元素的IDIDREFS值为其他元素ID的列表NMTOKEN值为合法的XML名称NMTOKENS值为合法的XML名称列表ENTITY值是一个实体ENTITIES值是一个实体列表NOTATION此值是符号的名称xml值是一个预定义的XML值1.15 DTD中声明元素的属性1)在DTD中,属性通过AT

12、TLIST来声明属性。2)声明属性的语法:例如: 注意事项:仅仅是定义元素中的内容为文本内容用#PCDATA,其他地方都用CDATA 例如: 1.16属性类型1)CDATA:文本内容。2)ID:属性的值在xml中是唯一的(该属性值不可重复)。3)枚举(en1en2):属性的值只能是列举的其中之一。1.17属性值的约束1)#REQUIRED:当前这个属性必须在标签里出现(即要写出来),则此时默认值无效了。例如:2)#FIXED:属性里的值为固定值(值要给出),或者值是其列举的其中之一。例如:3)默认值xxx:若在默认值位置直接给定值,那么就是默认值。例如:1.18 DTD命名空间介绍1)命名空间

13、(NameSpace),XML文件允许自定义标记,所以可能出现来自不同源DTD或Schema文件的同名标记,为了区分这些标记,就需要使用命名空间。2)命名空间的目的是有效的区分来自不同DTD的相同标记,例如下例xml文件中使用了命名空间区分开“表格”和“桌子”。例如: 这是一个表格 coffee table wood 2、Schema简介2.1 Schema的作用因为DTD无法解决命名冲突问题,所以出现了Schema,它是DTD的替代者。DTD和Schema的功能都是用于描述XML结构的。Schema:W3C提出的一套用于约束XML元素的标准,支持命名空间,和DTD的作用一致。DTD因为定义语

14、法相对困难,且不是标准的XML形式去描述定义的。而Schema本身就是xml(所以也被称作是自描述的语言),去约束另一个xml元素的内容相对DTD更易维护。2.2 Schema文件的扩展名xsdXML Schema Difinition(简称XSD,遵循W3C标准)。3、Java解析XML3.1 Java与XML共同点有很多共同点,比如跨平台、与厂商无关,目前为止Java对XML的解析比其他语言更完善(Java是支持XML最好的语言)。3.2 Java解析XML有两种方式1)DOM:文本对象模型(Document Object Model)2)SAX:基于xml的简单API(Simple AP

15、I For XML)3)嵌入式设备中常用SAX进行解析。例如android中就是使用SAX作为解析xml文件的工具的。Android中还有一种叫做Pull解析。3.3 JDOM/DOM4J目前常用的2种解析XML文件的API。3.4 DOM解析解析XML是以树状结构进行解析的。DOM在解析XML的时候会将整个xml内容解析出来,以Element(元素)描绘每个节点和嵌套关系,并载入内存。1)关键字:树(Document)2)优点:把xml文件在内存中构造树型结构,可以遍历和修改节点,因为它知道节点的所有关系。3)缺点:因为解析时就将整个xml文件全部载入到内存,所以解析过长,内存开销大。3.5

16、 SAX解析解析XML是把xml文件作为输入流,触发标记开始,内容开始,标记结束等动作。1)关键字:流(Stream)2)优点:解析可以立即开始,速度快,没有内存压力。3)缺点:不能对节点做修改。3.6案例:使用DOM4J包的核心API解析xml文件我们使用DOM工具,来自DOM4J,非常流行的用于解析xml的DOM工具,还有一种常用的叫做JDOM,解析步骤:1)创建用于解析Xml文件的读取器SAXReader;2)使用SAXReader读取指定的输入流来解析xml文件;3)第2步的方法会返回一个Document对象,描述整个文档,通过该文档对象获取根标签(标记)Root;4)根据树的组成形式

17、,逐一解析。 step1:创建DBinfo类,其中属性有 private String url;/连接的url private String driver;/连接的驱动 private String username;/数据库用户名 private String password;/数据库密码 private String dbName;/数据库连接名 private String attUser;/数据库标签的属性user各自对应的get/set方法step2:创建XMLUtils工具类用于解析xml文件(xml文件内容见第五章)属性如下: /* 定义常量,用于描述当前解析的XML中出现的标

18、签名 */ private static final String ELEMENT_JDBC=jdbc; private static final String ELEMENT_ORACLE=oracle; private static final String ELEMENT_MYSQL=mysql; private static final String ELEMENT_URL=url; private static final String ELEMENT_DRIVER=driver; private static final String ELEMENT_USERNAME=userna

19、me; private static final String ELEMENT_PASSWORD=password; private static final String ATTRIBUTE_USER=user;step3:在XMLUtils工具类中,添加xmlToDBInfo(InputStream input)方法/* 方法xmlToDBInfo:解析xml文件,将配置的所有数据库连接返回 */ public static List xmlToDBInfo(InputStream input) /* 参数InputStream input说明:因为我们要使用DOM去解析XML文件,那么一

20、定会通过输入流去获取Xml文件中的数据,无论这个文件来自网络还是本地文件,我们在程序中都是通过输入流的形式读取的。 */ /1 使用dom4j需要导包:dom4j-1.6.1.jar SAXReader reader=new SAXReader(); /* 解析xml前调用该方法!该方法默认值为false,设置为true的作用是检查xml的合法性,验证DTD。 */ reader.setValidation(false);/此处建议先false,否则DTD稍有错误就将报错! /2 导包:org.dom4j.Document Document document; try document =re

21、ader.read(input);/读取并解析文件 catch(Exception e) e.printStackTrace(); throw new RuntimeException(数据读取错误!,e); /3 导包:org.dom4j.Element /* root.getName()用于获取当前标签的名字,这里应该是jdbc */ Element root=document.getRootElement(); if(!jdbc.equals(root.getName() throw new RuntimeException(数据格式错误,根应该是:+ELEMENT_JDBC); /4

22、逐一解析 /* root.elements();该方法获取root元素下的所有子元素并以集合的形式返回。 * root.element(String name);获取指定名字的子元素 * root.elements(String name);获取指定名字的所有子元素 */ List childList=root.elements(); /* 将oracle元素和mysql元素保存的内容存放到相应的DBInfo对象中,再将这些对象存入一个集合并返回,最终完成解析工作。 */ List infos=new ArrayList(); for(Element child:childList) /将or

23、acle或mysql标签转化为DBInfo对象并存入集合infos DBInfo info=toDBInfo(child); infos.add(info); return infos; step4:将标签内容转化为DBInfo对象,添加toDBInfo(Element element)方法 private static DBInfo toDBInfo(Element element) DBInfo info=new DBInfo();/ Element urlElement=element.element(ELEMENT_URL);/现拿到标签,再拿标签内容/ String url=urlE

24、lement.getText(); String url=element.elementText(ELEMENT_URL);/同上面两步,直接获取子元素文本 String driver=element.elementText(ELEMENT_DRIVER); String username=element.elementText(ELEMENT_USERNAME); String password=element.elementText(ELEMENT_PASSWORD); String attUser=element.attributeValue(ATTRIBUTE_USER);/获取标签的

25、属性值 String dbName=element.getName();/获取当前标签的名字 info.setAttUser(attUser); info.setDbName(dbName); info.setDriver(driver); info.setPassword(password); info.setUrl(url); info.setUsername(username); return info; step5:测试 FileInputStream fis=new FileInputStream(src+File.separator+ day03+File.separator+ part2+File.separator+db_info.xml); List infos=XMLUtils.xmlToDBInfo(fis); for(DBInfo info:infos) System.out.println(db_name:+info.getDbName(); System.out.println(url:+info

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1