zoukankan      html  css  js  c++  java
  • DOM4J熟知

    什么是解析xml
      系统最终会从xml中读取数据. 读取的过程就是解析.

    CRUD ==> 增删改查 ==> create read update delete ==> 解析指的就是读.

    什么是解析器
      就是用来解析xml的类.
      过滤器,拦截器,监听器.... 都是具备相应功能的java类而已.

    两个常见的解析xml的思路
    思想
      DOM 将文档中所有内容都封装成对象. 读取时,将所有对象都加载到内存中. 在内存中创建一颗dom树(记录对象间的关系).
    优点  方便的进行增删改查.
    缺点  会非常消耗内存.

      SAX 事件驱动的. 与pull解析类似.把xml文档的读取过程,划分出5类事件.我们只要提供遇到每类事件做什么的锦囊即可.
    优点  内存占用小.
    缺点  不能进行增删改的操作.

    DOM 解析是由w3c推荐提出的.
    SAX  解析是由民间提出的.

    DOM 把所有内容封装成了5类对象.
      document  Element  Attribute  Text  Commons
    共同的父类
    node
      Node的属性 自身属性 nodeType  nodeName  nodeValue
      导航属性
        找子节点的:firstChild   lastChild   childNodes
        找父节点的:parentNode
        找兄弟节点:nextSibling   previousSibling

    获得Element的方式
      getElementById ==> Document
      getELementsByTagName ==> Document/Element
      getELementsByClassName ==> Document/Element
      getElementsByName ==> Document

    对于增删改的操作:
      创建一个元素: document.createElement
      添加一个元素: element.appendChild ,element.insertBefore
      替换一个元素: element.replaceChild
      删除一个元素: element.removeChild

    JAXP ==> JDK提供的 ==> java api for xml parser
    思想在java中的体现是接口. 我们要开发的话需要接口的实现类.由各大解析器厂商提供实现接口的类.

    A a = new AImpl();   //Aimpl2;
    A a = new AImpl2();
    上面的切换实现类的方式,需要该源代码,太过原始
    A a = JAXP.getXXX();  ==> 配置文件   ==> 我们通过修改配置文件就可以实现切换实现类.
    反射.泛型.

    DOM4J ==> 框架 ==>
    Dom for java
    DOM4J 整合两种思想.(SAX DOM)的思想. 使用sax的思想做读取xml. 又参照dom的思想,也在内存中创建了一颗对象关系树. 

    用dom4j如何避免乱码

    要保证写入的编码和读取的编码一致
      1.写入的编码如何控制?
      XMLWriter writer = new XMLWriter(new PrintWriter("src/str.xml","UTF-8"),format);
      2.读取的编码如何控制?
      <?xml version="1.0" encoding="GBK"?>,其中encoding属性决定了读取时采用什么编码,而encoding属性由format.setEncoding("GBK");控制.

    //其实要保证不乱码上面的方法太弱了!
    方法  使用字节流绝对不会出现乱码! 如下
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/str.xml"),format);

  • 相关阅读:
    C# CodeFirst(EF框架)代码优先创建数据库
    Entity Framework 配置关系(1对1,1对0)
    Entity Framework 配置关系(1对1,1对0)
    EFDbContext的使用
    EFDbContext的使用
    编程模式·观察者模式、事件通知、消息队列三者区别
    编程模式·观察者模式、事件通知、消息队列三者区别
    设计模式发布订阅方式实现异步并发
    设计模式发布订阅方式实现异步并发
    关于访问asp.net网站时登录后的奇怪问题
  • 原文地址:https://www.cnblogs.com/hanwen1014/p/6775681.html
Copyright © 2011-2022 走看看