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. ubuntu 修改默认root及密码

    安装完Ubuntu后忽然意识到没有设 置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的 root密码.我 ...

  2. ps图像渐变

    整理自:http://zhidao.baidu.com/question/16374167.html 1.用ps打开图片 2.在切换至英文输入法状态下(下面的操作均如此)按q 快捷键q的作用是切换标准 ...

  3. [CS231n-CNN] Training Neural Networks Part 1 : parameter updates, ensembles, dropout

    课程主页:http://cs231n.stanford.edu/ ___________________________________________________________________ ...

  4. 用x86的模拟器内核记得安装intel的haxm

    Android 模拟器一直以运行速度慢著称, 本文介绍使用 Intel HAXM 技术为 Android 模拟器加速, 使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题. Intel HAXM ( ...

  5. get新技能: 如何设置元素高度与宽度成特定比例。宽度改变,高度自动按比例改变。 例如设置宽高比16:9。

    设置宽高比在很多时候是有用的. 下面的栗子,我们设置一个容器的宽高比为16:9 //HTML代码片段 <div class="container"> <div c ...

  6. umbraco之DocumentType

    DocumentType定义了数据字段,这就像我们在数据库中定义表一样,这个数据字段就像表中的一个字段或者一个列.但不同的是,在umbraco里数据是分等级而不是一个表格性质. 这样就可以使用一个基本 ...

  7. 二叉查找树(二)之 C++的实现

    概要 上一章介绍了"二叉查找树的相关理论知识,并通过C语言实现了二叉查找树".这一章给出二叉查找树的C++版本.这里不再对树的相关概念进行介绍,若遇到不明白的概念,可以在上一章查找 ...

  8. Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化

    通过把不同的游戏物体放在不同的Layer里面能对不同类的游戏物体进行很方便的控制,如果某些游戏物体创建后你不想再改动,如地面 装饰 什么的, 你可以通过点击Layer下拉菜单把它们锁定了 也可以通过控 ...

  9. Linux的段错误调试方法

    linux段错误的调试方法 相关博文: http://blog.csdn.net/htianlong/article/details/7439030 http://www.cnblogs.com/pa ...

  10. 你不一定知道的几个很有用的 Git 命令

    这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...