1 总结XML基础

XML基础

1)XML的作用

1.1 作为软件配置文件

1.2 作为小型的“数据库”

2)XML语法(由w3c组织规定的)

标签:

标签名不能以数字开头,中间不能有空格,区分大小写。有且仅有一个根标签。

属性:

可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单双混用。

文档声明:

<?xml version="1.0" encoding="utf-8"?>

encoding="utf-8": 打开或解析xml文档时的编码

注意:

保存xml文档时的编码 和 解析xml文档时的编码要保持一致,才能避免中文乱码问题!

3)XML解析

程序读取或操作xml文档

两种解析方式:   DOM解析   vs   SAX解析

DOM解析原理:一次性把xml文档加载成Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容(标签,属性,文本,注释)。

Dom4j工具(基于DOM解析原理):

读取xml文档:

Document doc = new SAXReader().read("xml文件");

节点:

nodeIterator();  所有节点

标签:

element("名称")   指定名称的第一个子标签对象

elementIterator("名称");  指定名称的所有子标签对象

elements();  所有子标签对象

属性:

attributeValue(“名称”) 指定名称的属性值

attribute("名称")   指定名称的属性对象

getName()  属性名称

getValue()  属性值

atributeIterator()   所有属性对象(Iterator)

attributes()       所有属性对象(List)

文本:

getText()  得到当前标签的文本

elementText("子标签名称")  得到子标签的文本

今天的目标:     Dom4J修改xml   + xPath技术  + SAX解析 + XML约束

2 Dom4j修改xml文档

2.1 写出内容到xml文档

XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)

wirter.write(Document);

2.2 修改xml文档的API

增加:

DocumentHelper.createDocument()  增加文档

addElement("名称")  增加标签

addAttribute("名称",“值”)  增加属性

修改:

Attribute.setValue("值")  修改属性值

Element.addAtribute("同名的属性名","值")  修改同名的属性值

Element.setText("内容")  修改文本内容

删除

Element.detach();  删除标签

Attribute.detach();  删除属性

3 xPath技术

3.1 引入

问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!

3.2 xPath作用

主要是用于快速获取所需的节点对象。

3.3 在dom4j中如何使用xPath技术

1)导入xPath支持jar包 。  jaxen-1.1-beta-6.jar

2)使用xpath方法

List<Node>  selectNodes("xpath表达式");   查询多个节点对象

Node       selectSingleNode("xpath表达式");  查询一个节点对象

3.4 xPath语法

/      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)

//     相对路径       表示不分任何层次结构的选择元素。

*      通配符         表示匹配所有元素

[]      条件           表示选择什么条件下的元素

@     属性            表示选择属性节点

and     关系          表示条件的与关系(等价于&&)

text()    文本           表示选择文本内容

3.5 案例

用户登录功能:

用户输入用户名和密码 -> 到“数据库”查询是否有对应的用户 ->

有: 则表示登录成功

没有: 则表示登录失败

用xml当做数据库

user.xml   用来存储用户的数据

4 SAX解析

4.1回顾DOM解析

DOM解析原理:一次性把xml文档加载进内存,然后在内存中构建Document树。

对内存要求比较要。

缺点: 不适合读取大容量的xml文件,容易导致内存溢出。

SAX解析原理: 加载一点,读取一点,处理一点。对内存要求比较低。

4.2 SAX解析工具

SAX解析工具-  Sun公司提供的。内置在jdk中。org.xml.sax.*

核心的API:

SAXParser类: 用于读取和解析xml文件对象

parse(File f, DefaultHandler dh)方法: 解析xml文件

参数一: File:表示 读取的xml文件。

参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类

例如:{

1.创建SAXParser对象

SAXParser parser=SAXParserFactory.newInstance().newSAXParser();

2.调用parse方法

parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());

}              [一个类继承class 类名(extends DefaultHandler)  在调用是创建传进去

DefaultHandler类的API:

void startDocument()  :  在读到文档开始时调用

void endDocument()  :在读到文档结束时调用

void startElement(String uri, String localName, String qName, Attributes attributes)  :读到开始标签时调用

void endElement(String uri, String localName, String qName)   :读到结束标签时调用

void characters(char[] ch, int start, int length)  : 读到文本内容时调用

                      ============DOM解析    vs   SAX解析                     ========

DOM解析

SAX解析

原理: 一次性加载xml文档,不适合大容量的文件读取

原理: 加载一点,读取一点,处理一点。适合大容量文件的读取

DOM解析可以任意进行增删改成

SAX解析只能读取

DOM解析任意读取任何位置的数据,甚至往回读

SAX解析只能从上往下,按顺序读取,不能往回读

DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。

SAX解析基于事件的编程方法。java开发编码相对复杂。

总结:

1)Dom4j修改xml文档

new XMLWrier();

......

2)xPath技术: 快速查询xml节点

selectNodes()

selectSinglNode();

xpath表达式语言

3)  SAX解析

SAXParser parse

parser()

DefaultHandler类:

startElement();

characters();

endElement();

练习:

设计一个通讯录程序

联系人: 编号  姓名  性别  年龄  电话  QQ 邮箱

功能要求:

添加联系人

修改联系人

删除联系人

查询所有联系人

要求:

1)交互使用console(控制台)

2)数据存储到xml文件(作为“数据库”)(使用dom4j)

提示:

启动程序

================

【1】添加联系人

【2】修改联系人

【3】删除联系人

【4】查询所有联系人

【Q】退出程序

==================

输入 1:

请输入编号:

请输入姓名:

请输入年龄

。。。。

添加成功!  -> 数据保存在xml中

输入2

。。。。。。

输入4

编号  姓名   年龄  。。。。

001   张三  30

002   李四 20 。。。

。。。。。

6、XML(2)的更多相关文章

  1. 归档 Archive、解档Unchive、 XML(一)

    1 使用归档的方式保存文件 1.1 问题 归档是任何对象都可以实现的更常规的方式,可以进行归档的对象需要实现NSCoding协议,而且每个实例变量应该是基本数据类型或者是实现NSCoding协议的某个 ...

  2. 5、XML(1)

    1 XML入门 1.1 引入 HTML: 负责网页的结构 CSS: 负责网页的样式(美观) Javascript: 负责在浏览器端与用户进行交互. 负责静态的网页制作的语言 HTML语言特点: 1)由 ...

  3. 深入了解三种针对文件(JSON、XML与INI)的配置源

    深入了解三种针对文件(JSON.XML与INI)的配置源 物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonCon ...

  4. Hive介绍、安装(转)

    1.Hive介绍 1.1 Hive介绍 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语 ...

  5. UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

  6. Qt之XML(一) DOM

      Qt之XML(一) 文档名称 Qt之XML 创建时间 2012-10-10 修改时间 2012-10-10 创建人 Baifx 简介(收获) 最近开始使用QtXml,学习了一番,写了几个小测试程序 ...

  7. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  8. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  9. XML系列之--创建电文格式的XML(一)

    关于XML,学校那会,老师在口中仅仅提及,自己也未曾深入接触过,仅是些将最基本XML文件内容显示在web定义的表格中之类的简单操作,如今项目中的收发电文涉及到复杂XML的操作.趁此契机好好回顾下XML ...

随机推荐

  1. Java 杨辉三角的简单实现

    package com.lf.trianglenumber; public class Test { public static void main(String[] args) { // 打印的行数 ...

  2. electron Uncaught ReferenceError: jQuery is not defined

    用electron写桌面程序时 ui部分的html页面引入的js会用到jquery 用常规的方式引入是不行的,会抛出如题的异常 <script type="text/javascrip ...

  3. freemark 判断是否为空 是否存在

    <!--1\---><!--判断aaa是否不为空,eclipse插件老报错.---><#if aaa??>  ${aaa}</#if><!--2\ ...

  4. String的replaceAll方法中的正则表达式用法

    项目里面 需要对已手机号码进行 如下的显示 比如15088688388 要显示为150****8388的效果 实现这个简单的效果 方法有很多 我想试试用正则表达式去实现 查了点资料最终试出来以下方法可 ...

  5. python 安装扩展库

    直接使用pip安装时非常慢,而且还非常容易失败.通过在网上查找,发现可以使用镜像安装,如下: pip install xxx -i http://pypi.douban.com/simple/ 但是在 ...

  6. CollectionView添加头尾部

    //上下拉头尾部 self.collectionView.footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self ref ...

  7. Android Support Font 安卓系统支持字体(配图)

    测试了一台安卓机器,发现所有字体显示都一样.

  8. Aptana Studio3开发Python和Ruby(最佳工具)

    即从: http://d1iwq2e2xrohf.cloudfront.net/tools/studio/standalone/3.3.1.201212171919/win/Aptana_Studio ...

  9. bzoj3304 [Shoi2005]带限制的最长公共子序列

    dp,时间复杂度O(n^3),f[i][j][k]表示a串到i,b串到j的时候,匹配了c串的k位,要用滚动数组 代码 #include<cstring> #include<algor ...

  10. struts配置通配符*来匹配方法,实现动态调用

    01:web.xml中配置,启动struts2 <?xml version="1.0" encoding="UTF-8"?> <web-app ...