dom方式解析
  根据XML的层级结构在内存中分配一个树形结构,把XML的标签、属性和文本都封装成对象
  优点:如果很方便实现增删改操作
  缺点:如果文件过大,会造成内存溢出
 
sax方式解析
  采用事件驱动,边读边解析
  从上到下,一行一行的解析,解析到某一个对象,返回对象名称
  优点:如果文件过大,不会早晨该内存溢出,方便实现查询的操作
  缺点:不能实现增删改操作
 
jaxp解析器在jdk的javax.xml.parsers包里面
  四个类,分别针对dom和sax解析使用的类
  dom:
    DocumentBuilder:解析器类
      通过DocumentBuilderFactory.newDocumentBuilder()获取
      parse("xml路径")返回的是Document接口,父接口为Node
 
  Document中的方法
    getElementsByTagName(String tagName)
      得到标签,返回集合 NodeList
    createElement(String tagName)
      创建标签
    createTextNode(String data)
      创建文本
    appendChild(Node new Child)
      把文本添加到标签下面
    removeChild(Node oldChild)
      删除节点
    getParentNode()
      获取父节点
    NodeList接口
      getLength() 得到集合的长度
      item(int index) 下标取到具体的值
      getNodeName() 获取节点名称
      getTextContent() 获取节点内容
 
  DocumentBuilderFactory:解析器工厂
    通过DocumentBuilderFactory.newInstance()获取
 
  sax:
    SAXParserFactory:解析器工厂
      通过SAXParserFactory.newInstance()获得
    SAXParser:解析器类
      通过SAXParserFactory.newSAXParser()获得
 
      parse(File f, DefaultHandler dh)
        f xml路径
        dh 自动执行
          startElement(String uri, String localName, String qName, Attributes attributes)
          characters(char[] ch, int start, int length)
          endElement(String uri, String localName, String qName)
          当解析到开始标签时,执行startElement(),返回qName标签名称
          当解析到文本内容时,执行characters(),通过String的构造方法返回内容的那个解析到结束标签时,执行endElement(),返回qName标签名称
        创建一个类继承DefaultHandler,并重写3个方法
 
使用dom4j解析
  获取Document接口
    SAXReader reader = new SAXReader();
    Document document = reader.read(path);
  Document的父接口是Node
    getRootElement():获取根节点,返回Element
  Element是一个接口,父接口为Node
    getParent():获取父节点
    addElement():添加标签
 
dom4j支持xpath操作
  可以直接获取到某个元素
  语法:
    /AAA/BBB/CCC:表示一层一层的,AAA下的BBB下的CCC
    //BBB:所有的BBB
    //*:所有的元素
    //BBB[1]:第一个BBB元素
    //BBB[last()]:最后一个BBB元素
    //@id:有id属性的元素
    //BBB[@id]:有id属性的BBB元素
    //BBB[@id='b1']:id属性值为b1的BBB元素
  dom4j默认不支持xpath,需要引入jaxen的jar包
  selectNode() 查询节点集合,返回List集合
  selectSingleNode() 查询单个节点,返回Node接口

XML的解析方式(Java)的更多相关文章

  1. XML的解析方式(DOM、SAX、StAX)

    (新)  XML的解析方式(DOM.SAX.StAX) 博客分类: XML   一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...

  2. xml的解析方式的简介

    xml的解析的简介(写到java代码) *xml是一个标记型文档 *js使用dom解析标记型文档? -根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象 -do ...

  3. Android:XML简介 & 解析方式对比(DOM、SAX、PULL)

    目录   示意图 1. 定义 XML,即 extensible Markup Language ,是一种数据标记语言 & 传输格式 2. 作用 对数据进行标记(结构化数据).存储 & ...

  4. 浅谈 Java Xml 底层解析方式

    XML 使用DTD(document type definition)文档类型来标记数据和定义数据,格式统一且跨平台和语言,已成为业界公认的标准. 目前 XML 描述数据龙头老大的地位渐渐受到 Jso ...

  5. Java对XML文件解析方式之一_SAX

    SAX(org.xml.sax) Simple API for XML,以事件的形式通知程序,对Xml进行解析.   SAX技术的介绍:SAX是一种以事件驱动的XML api,由它定义的事件流可以指定 ...

  6. 四种xml的解析方式

    这篇文章是我上网找资料,加上自己总结了一些而得 资料来源: http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html http ...

  7. 基于底层的 XML 的解析方式详解

    在上一篇博客中,我们介绍了什么是 XML ,http://www.cnblogs.com/ysocean/p/6901008.html,那么这一篇博客我们介绍如何来解析 XML . 部分文档引用:ht ...

  8. 黑马day01 xml 的解析方式

    XML编程:利用java程序去增删改查(CRUD)xml中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了非常多的解析api sun jaxp既有dom方式也有sax方式,而 ...

  9. :Android网络编程--XML之解析方式:SAX

    任何放置在资源(res)目录下的内容可以通过应用程序的R类访问,这是被Android编译过的,而任何放置在资产(assets)目录下的内容会保持它的原始文件格式,为了读取它们,必须使用AssetMan ...

随机推荐

  1. Android Touch消息传递机制探究分析

    在Android中,消息的传递控制主要是通过两个方法共同配合使用来对用户的触摸消息进行分发的,下面就来看看这两个方法: onInterceptTouchEvent:此方法定义于ViewGroup中,顾 ...

  2. DevExpress.XtraGrid winform试用分享

    DevExpress.XtraGrid在winform里使用还挺麻烦,为了减少重复代码和代码复用,本人针对DevExpress.XtraGrid封装了一个Form的基类,其中涵盖了DevExpress ...

  3. c++类的 static 和const那些事

    1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化. 2.static const的成员变量 ...

  4. ionic介绍

    ionic介绍 Ionic是一个前端的框架,帮助开发者使用HTML5, CSS3和JavaScript做出原生应用. The beautiful, open source front-end fram ...

  5. 明天去FDUSC报道了,GOD BLESS ALL OF US

    @lrb @tellmewtf @proverbs

  6. 关于html、asp、php模板引擎、aspnet mvc、REST的一点思考

    先看我对REST的一点认识,下面是<rest实战> 这本书的序言文字:      在我刚刚开始从事解决计算问题的时候,业界就有很多人有一个愿望:将系统设计为能够被自由组合的组件.互联网(I ...

  7. oracle 12541,12560,00511无监听程序, 协议适配器错误问题分析及解决方案

    oracle 12541,12560,00511无监听程序, 协议适配器错误问题分析及解决方案   问题描述: 1. lsnrctl start.stop.非常慢,出现卡顿现象: 2. 执行lsnrc ...

  8. Money类

    public class Money { /// <summary> /// 要转换的数字 /// </summary> private double j; private s ...

  9. Lua中调用C函数

    Lua利用一个虚拟的堆栈来给C传递值或从C获取值.每当Lua调用C函数,都会获得一个新的堆栈,该堆栈初始包含所有的调用C函数所需要的参数值(Lua传给C函数的调用实参),并且C函数执行完毕后,会把返回 ...

  10. Uvaoj 11248 Frequency Hopping(Dinic求最小割)

    题意:1到n节点(节点之间有一定的容量),需要流过C的流量,问是否可以?如果可以输出possible, 否则如果可以扩大任意一条边的容量 可以达到目的,那么输出possible option:接着输出 ...