大专生JAVA这条路----回顾xml学习(3.21-3.22)

      可能是因为以前都已经具备了的一些面象对象的基础------总体感觉这课不难!

      虽然现在学的东西都是以前经常接触的东西,仍旧感觉学到很多不错的东西,特别是一在强调的查阅文档的能力很重要,我也意识到了!因为JAVA是开源软件的原因吧,所有有很多的开源工具,而仅仅解析xml常用的就有:DOM,SAX,JDOM,DOM4J..更不说其它的JAVA开源工具了,也有成百上千吧!所以如果凭一个人的记忆是不可能做到的,因此学习能力就显得格外的重要了,所以老师这样强调对于学生来讲很必要,让我欣慰的是,他们没有要求我们记忆,而是带着我们一步一步的学习查阅文档,怎么去查阅可以快速的得到想要的东西!这是经验吧!以前看到英文文档就不知道所措的我,也许是因为在这个行业不得不要做的选择时,现在看英文文档的能力在不自觉中已经提升了一大截。

总结

XML 的用途

1.存取数据 2.配置属性  从以往在项目的经历(在重庆X软件公司时,从一个数据中将数据读出,然后生成的是XML文档,另一台服务器根据读取该XML的值,填充到数据表中) xml主要用于配置 用xml传递数据也比较常用.

 

DOM,SAX,JDOM,DOM4J 解析xml的公优缺点:

               

DOM  基于树型 将所有的内容读入内存,所以当xml文件很大时,很消耗内存 数据量小

SAX   基于事件型 需要自自己实现 数据量大时

JDOM 是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快

DOM4J 具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM(Java API for XML Messaging )也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件. 综合性勇优越

我们主要学习的是DOM4J解析XML的技术,其它的了解


读取 xml 数据的几个步骤:
„  找到文件-------new File(filepath);
„  打开文件-------  new FileInputStream(file);
„  通过一台机器把 InputStream变成树状的东西-----Document  new XMLReader().read(in).
„  找树根---users document.getRootElement();
„  找树枝---user
„  找树叶----id,username 对应的值(标签体)
„  关闭流  close();
 

这儿学习,不是背住这个步骤,而是一种思想。

如果要我自己写一个解析xml文件的工具,肯定要对文件进行操作,一定会用到流,所以会用流去定位文件。然后在去读取文件中的字符进行判断。而在这里,DOM4J已经提供了操作XML文件的类,我们只要去调用现成的方法既可。

 


描述一个用户实体的属性:
Id,username,password,gender,birth,address

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

<users count="2">----------------->相当于表名

    <user>--------------->表中的一条记录

        <id></id>-------->记录中的值

        <username></username>

        <passowrd></passwordl>         

    </user>

 

    <user>

        <id></id>

        <username></username>

        <passowrd></passwordl>         

    </user>

</users>
 

从上图可知,如果用xml文件存储数据也可以取得和数据储存的效果。
几种存储方式:
1.  普通 txt 文件------------存取不便
2.  数据库     ------------没必要
3.  xml 技术   -------------结构清晰,层次明了 

 
 
 
问题:
1.  查询所有的用户
2.  查询是否存在指定名称用户?如果存在返回该用户完整信息,否则提示没有。
3.  对用户名进行模糊查询
4.  对任意字段进行模糊查询
 
分析:
返回值:
User--------null 表示不存在。
Int,boolean----不能表示一个完整对象。
 
IUserDAO:
User  getUserByUsername(String username)
List<User> getAllUser();
List<User> getUserListByKeyword(String keyword);
 
UserDAO
 
 
 
 
写 xml 数据
1.  得到一棵树:从内存中创建(空树)
2.  往树上挂树根 users 3.  往树根挂树枝 user
4.  往树枝上挂子树枝 id,username,birth,gender等
5.  往子树枝设值
6.  保存树在硬盘上。
 
Flush:强制刷新缓冲的内容到硬盘中。
 
 
问题:
如何读取属性?
element.attribute(属性名).getValue()
 
 
 
如何格式化输出 xml 文件?
设置输出的标准
 
 
输出格式:
XMLWriter 以 FileWriter
OutputFormat.createPrettyPrint
setIndent
 
如何输出中文?
 
解决中文问题:用 OutputStream 替换 Writer
 
 
 
 
准备:引入 java  类,用来封装 user数据,或者与 xml 的 user标签建立映射关系。
 
DocumentManager:
统一管理 Document 对象
 
转化为日期格式:
Date.valueOf(String)
 
问题:把 xml 当作一个单表来使用?
 
 
1.  读取所有的 user 信息
2.  读取指定 id号的用户的信息。
3.  读取 count 属性,用于获取到用户数量。 Attribute 
4.  对读取元素加以排序
Comparator对对象集合排序
接口:Comparator-----制定排序标准,compare
第一:转成实际上进行比较对象的类型
第二:取出真正排序属性值。
-1----升序,+1----降序
被排序的对象可以是一个 List,直接从查询结果得到。
Collections.sort();把排序标准与被排序的对象关联起来。
 
优化:随意控制升降序
 
优化:对任意字段进行排序
5.  判断指定 id值是否存在。
6.  插入一个用户到 xml 中去。
分析:
„  找到树根
„  根据 id 判断用户是否存在
„  如果存在,抛出异常,退出程序。
„  构建树枝(根据用户属性值)
„  挂树枝到树根
„  修改树根属性 count
„  回写树到硬盘
引入 UserExistsException
7.  主键采用自增方式。(得到最大值加 1)
„  得到树根
„  得到 user树枝
„  得到所有 id,找到最大值
„  Id 加 1
8.  增加一个用户,主键是自增长。
„  得到树根,产生主键,设置用户 id值
„  得到树根,
„  构建树枝
„  挂树枝到树根
„  得到 count 属性,并且加一
„  回写树倒硬盘。
9.  修改 count 属性
„  得到根元素中 count 属性值
„  根据外部调用者的需求,确定是增大还是减小
„  重新设置 count 属性
10. 根据 id 删除一个用户(查找+删除)
„  借助根元素,找到该 id所在 user元素
„  从根元素中删除 user元素
„  得到 count 属性,并且减一 „  回写到硬盘
„  只有从根上删除掉并且存盘成功,才可认为整个删除操作成功。
11. 根据 id 修改除 id 之外所有属性。(查找+修改)
分析:
„  得到根元素根据 id 找到对应 user元素
„  替换除 id 之外的所有值。
„  回写到硬盘。
 

 

总结:

      从上面的总结中可以看出。其实要实现上面的功能并不是很难!我感觉收藏最大的是对代码的忧化。这也是我在以前做项目时没有体会到的,当时只是学了基础就上了阵,做了项目都没有真正的去想让代码重用。今天从赖老师的写的代码上看到,如果将代码重用得当,可以让类的结构变得层次分明,一是起到了复用的作用,更是让代码的可读性大大增加!

  • 0
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值