您的位置:首页 > 编程语言 > Java开发

javaEE学习笔记【03】XML操作

2015-10-13 15:12 281 查看
XML简介XML即可扩展的标记语言。因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定。目前为止所有的标记的语言都属于开源的语言。由W3C组织进行一个基本的维护。因此大家学习这些语言的时候应该参考W3C公布的文档。
XML作用1.可以用作软件的配置文件。2.可以实现独立平台的数据传输。 C、 XML 、Java 、天气预报3.Web Service。4.可以描述带关系的数据。
XML声明指令语法:
xml 是一个xml文件的指令名通知解析器以XML的方式进行解析(1)version 指定XML的版本,目前只能是1.0(2)encoding 指定XML文件的被解析时候的解码方式,一般的值是GBK或UTF-8
(3)standalone 指定该文件时否是独立文件。默认值是yes,也可是no细节体验:(1)<>和?号之间不能有任何字符包含空格(2)?和xml指令名之间不能有任何的字符包含空格(3)版本号只能是1.0(4)编码和解码要一致(5)三个属性出现的顺序是固定的;【version / encoding / standalone】
一个XML文件中只能有一个根元素包含其他元素
但是如果在标签体中大量的出现特殊字符,那么如果要使用转移字符那么就太繁琐了。解决方案:CDATA区域按照原格式输出
XML的样式表跟css差不多一致
XML官方采用DTD约束,较为简单的操作但是功能性不是非常强大Schema约束XMLSchema约束技术定义了丰富的元素类型可以很细致的对XML元素和属性以及出现的次数等进行约束,但是正是由于过于详细那么导致该技术比较复杂。因此开发者只需要学会Schema文件的引入以及读懂别人的Schema基本的语法可以修改即可。
使用了一个绝对路径进行资源的访问,无法获取该资源?在项目中一定不要使用绝对路径进行资源的操作。
在项目中引入了两个jar包,但是在编码的时候没有提示?导入的一定要是jar包,业务逻辑一定要写在方法
熟练掌握XML的基本语法结构即可。了解DTD和Schema的语法规则掌握约束文件的引入方法(Spring框架)大家只需要可以直接看懂别人写的DTD约束进行基本的修改即可
JAXP技术JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术。大家可以参见SUN的以下两个包:javax.xml.parsers.* 【主要存储的是解析器】org.w3c.dom.*或org.w3c.sax.* 【主要存储的是DOM解析或SAX解析需要的API】DOM解析主要采用DOM树的方式进行XML的数据解析。如:JavaScript中的DOM操作SAX解析主要采用事件的方式进行XML的数据解析。如:JavaScript中的事件机制
DOM解析1. 准备要解析user.xml文件
2. 获取解析器, 提供获取解析器的方法
3. 获取解析的DOM树对象,提供获取DOM数据的方法
4. 获取根元素,提供解析根元素的数据的方法
5. 通过关系获取根元素, 提供解析根元素的数据的方法
6. 添加元素, 添加一个user节点
7. 为了让内存中的修改的DOM树持久化到磁盘文件需要定义以下方法提供一个工具方法将内存中的DOM树存储到磁盘的指定文件中
思考:以上的代码为什么可以直接的处理中文?文件本身是UTF-8编码存储的和使用的是字节流。8. 修改元素,修改第二个user的年龄为30岁
9. 删除元素, 删除第一个user节点
以上的代码存在代码的重复。
10. 加强使用关系获取元素,使用关系获取节点
11. 属性的操作,属性操作
总结:在实际的项目开发中我们经常遇到的XML数据时比较大的,如果使用DOM进行数据的解析,那么首先在内存中会形成一个DOM树结构。因此容易导致内存的一个溢出。所以不建议大家使用DOM解析进行操作较大的XML数据。如果只是需要进行XML文件的数据获取,那么推荐使用SAX解析。SAX解析SAX即Simple Api for Xml就是一个简单的操作XML数据的一套SUN提供的API机制。SAX采用的解析的原理是基于事件触发的机制。SAX技术只能进行XML数据的读取。(1)准备需要解析的XML文件linkmans.xml
2. 获取SAX解析器
3. 解析数据
4. 创建一个继承自DefaultHandler类的MyHandler.java
5. 在main函数中调用解析元素的方法
通过以上的程序发现其实SAX解析的时候只是需要开发者传递相应的事件处理器对象即可(继承自DefaultHandler的类)。举例1:创建一个事件处理器获取XML中的指定的节点数据。
使用SAX解析XML数据并进行数据的集合封装其实使用任何的XML解析技术来解析XML数据都需要后期的数据封装,如果只是单独的获取某一个节点的值是没有任何含义的。因此需要将XML的数据解析好之后以对象的方式进行封装到指定的集合中便于其他应用程序的处理。
代码实现步骤1. 实现一个Linkman.java的javabean对象
3. 创建一个用于封装的事件处理器Listhandler.java
总结:如果使用SAX进行数据的读取那么一定是一个很好的选择,但是该解析技术不能进行其他的操作比如:增、删和改。解决方案:可以有一个种技术奖DOM和SAX结合起来即可以高效的查询又可以进行实际的数据操作(增、删和改)。即使用第三方的XML解析技术DOM4J。DOM4J解析DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型。DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需要下载并引入jar包。dom4j is an Open Source XML framework for Java. dom4j allows you to read, write, navigate, create and modify XML documents. dom4j integrates with DOM and SAX and is seamlessly integrated with full XPath support下载:http://sourceforge.net/projects/dom4j 引入:dom4j-1.6.1.jar (核心包)、 jaxen-1.1-beta-6.jar(Xpath支持包)(1)如何去学习一个开源的工具包?一般的开源工具中都提供了免费的API文件,开发者可以参考该文档。DOM4J提供的文档中有一个免费教程可以直接使用。 【Quickstart】开始解析(1)准备需要解析的xml文件linkmans.xml
2. 获取解析器
3. 获取解析对象
4. 获取根元素节点
5. 获取指定的其他的元素,获取其他元素的时候默认需要从根节点开始查找。
6. 添加元素
7. 修改的document需要进行持久化的操作,因此需要提供以下的方法,提供一个工具方法将内存中的Document写入XML文件
8. 修改元素
9. 删除元素
10. 属性的操作
(11)获取焦宁波的id
问题:阅读以下的代码,并说出以下的代码的缺点。 获取linkman中的linkman
发现如果需要遍历一个比较深的元素节点,那么需要多次的element()。如:存储一个自己的隐私文件需要建立100个文件夹吗?那么如果路径比较长需要进行路径访问的方式的优化。如果在DOM4J进行解析查找元素可以使用类似Windows中的路径模式来查找元素那么就变得简单且高效。如果使用xpath代码可以简化如下:
以上的代码可以通过xpath快速的查找指定的元素节点,因此以后在实际的开发中我们如果需要解析XML数据那么就需要DOM4J+Xpath进行联合的处理。
Xpath简介Xpath是一个独立的一个路径语言,主要的目的是为了查找路径中的元素。那么DOM4J默认支持Xpath的路径查找。常用的方法有以下的两种:
常用的Xpath路径写法
路径
说明
/AAA指定从XML文档的根开始写路径
//BBB指定从整个XML中搜索满足的元素名
/AAA/CCC/DDD/*指定路径下所有的元素
//*指定获取所有的元素
/AAA/BBB[1]指定路径下的第一个元素,一定是以1开始的
/AAA/BBB[last()]指定路径下的最后一个元素
//@id 指定要获取的属性元素
//BBB[@id]指定带属性的元素
//BBB[@id='b1']指定属性值的元素
//BBB[ position() = floor(last() div 2 + 0.5) or position()
= ceiling(last() div 2 + 0.5)]
根据计算获取元素
使用DOM4J+Xpath实现用户登陆和注册
(1)编写一个用于用户登陆的信息文件users_login.xml
(2)登陆的业务方法
(3)注册的业务逻辑方法,提供一个业务逻辑存储一个User
DOM VS SAX VS DOM4J+XPATHDOM将XML文件以DOM树的方式装载进内存进行解析。Node、 Element、Document、Text、Attr等。缺点: 不能解析大数据的XML文件。优先: 对于XML可以进行任何操作。SAX将XML的解析分为不同的时间段,因此需要创建开发者自己的事件处理器类。startDocument()/endDocument startElement()/endElement() characater()缺点: 只能获取元素。优先: 采用事件机制速度快。DOM4J+XPATHDOM4J+XPATH结合了DOM和SAX各自的优势并摈弃了两者的缺点。总结主来一条:优先使用DOM4J+XPATH
使用DOM存储一个节点,但是xml文件中连同根元素都会消失,就是没有将DOM树写回XML文件。new DomSource(dom)
在指定的位置之前插入元素,调用insertBefore()方法的时候应该调用的是直接父类的该方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: