XML学习总结及实践

XML学习总结及实践

  • xml定义:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
  • xml技术在企业开发中的主要用途
  1. 存储和传输数据
  2. 作为框架的配置文件
  • 使用xml存储和传输数据
  1. 通过程序生成xml
  2. 读取xml中的数据--xml解析
  • xml解析思想
    • Dom解析
      • Document Object Model--文档对象模型
      • 解析思想:将整个xml加载内存中,形成文档对象,所有对xml的操作都是对内存中document对象操作
      • DOM是官方xml解析标准
      • 所有开发语言都支持
    • SAX解析
      •   Simlple API for XML xml简单API
      • 来自开源社区引文当xml文档非常大, 不可能将xml数据加载到内存中
      • 解析思想:一边解析,一边处理,一边释放内存资源
    • STAX解析
      •  The Stream API for XML --XML流API
      • STAX是一种拉模式xml解析方式,SAX是一种推模式xml解析方式
      • 推push模式,由服务器为主导,向客户端主动发送数据
      • 拉pull模式:由客户端为主导,主动向服务器申请数据
    • XML解析开发包
      • JAXP:Sun官方推出,同时支持以上三种解析方式
      • DOM4j:开源框架:支持DOM、Sax、JAXP
      • xml Pull: Android移动设备内置xml解析技术,支持Staxt解析
    • DOM和Sax/STAX的区别
      • XML文档比较复杂,或者随机处理文档中的数据时不建议使用dom4j
      • 相对于DoM,sax和stax是一种更轻量级的方案,内存开销小
      • 但是sax/stax的编程较为复杂,而且无法在读取过程中修改xml数据
      • 当sax和stax读取xml数据时,如果读取到内存的数据不释放,内存中将存在整个xml文档数据,这样类似DOM,就可以进行修改和回写
    • 开发中如何选择解析
      • 如果必须对数据进行更改,并且作为xml将其输出,多数情况下采用dom
      • 其他情况使用sax、stax

DOM4J解析

  1.    主页:【dom4j】https://github.com/dom4j/dom4j
  2. 添加依赖dom4j.jar
  3. 要解析的文档
<?xml version="1.0" encoding="UTF-8"?>
<struts>
    <action name="login" class="com.coderising.action.LoginAction">
        <result name="success">/jsp/homepage.jsp</result>
        <result name="fail">/jsp/showLogin.jsp</result>
    </action>
    <action name="logout" class="com.coderising.action.LogoutAction">
        <result name="success">/jsp/welcome.jsp</result>
        <result name="error">/jsp/error.jsp</result>
    </action>
</struts>

  4.获取所有的节点名称

//1.创建一个解析对象 saxReader
        SAXReader saxReader = new SAXReader();try {
//2. 读取配置文件structs.xml Document read
= saxReader.read(new File("src/com/coderising/action/struts.xml")); //3 获得根节点(struts根节点) Element rootElement = read.getRootElement(); //4.获得根节点下的一级节点 (action 节点) List<Element> elements = rootElement.elements(); for (Element element : elements) {
          //5 获取name的属性 Attribute attribute
= element.attribute("name"); //6 如果等于传递进来的actionName if(attribute.getValue().equals(actionName)){//获得属性值
            //进行下一步操作。。。。
} }

 

转载于:https://www.cnblogs.com/Icefog/p/6504370.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值