XML


是什么:

  是一种标记语言(Markup Language),就像html一样。只不过没有预先定义的<tag>便签,也就是可以随便定义<tag>便签,且浏览器也不会去解析。

为什么要用:

  用于存储信息(少量数据或软件配置信息),并且这种存储是独立于软件和硬件的。现已被广泛应用于互联网和各种程序之中。就是一个规范、标准,大家遵守这个规范去存储信息,可以增加软件通用性,增加便利,所以我们也要使用。这就如同统一度量衡一个意思,顺应全球化发展。而这也是和html不同的地方:html被用来显示数据,它专注于怎么显示,而xml专注于存储什么数据。

怎么用:

  1,他没有预定义标签,所以可以自定义标签,想定义什么便签就定义什么,一对标签之中放的是数据。其次,他是一个严格的树形结构:一个根节点,多个子节点。每个子节点又可作为根节点。如下所示:

<root><child><subchild>data</subchild></child>
<child><subchild>data</subchild></child>
</root>

  2、没有预定义便签一方面是好事,另一方面增加了不确定性。所以就出现了DTD,Schema标准(所以说最NB的还是设计标准的!),用来描述xml文档的结构,给标签设定了一个规范,如同预定义标签一样。例如:有哪些节点、父节点下子节点的顺序、节点中的数据类型等。(详细的语法参见w3schools)

JAVA解析XML


编程接口 

 作为程序员,最关注的就是如何编程操作xml。对此,w3c提供了DOM编程接口(只有接口,没有实现类;这也算面向接口编程。),另一个是由xml开源社区提供的sax接口。这两个接口如今都在javaSE中。

  • org.w3c.dom
  • org.w3c.dom.bootstrap
  • org.w3c.dom.events
  • org.w3c.dom.ls
    • Interfaces
       
      • DOMImplementationLS
      • LSInput
      • LSLoadEvent
      • LSOutput
      • LSParser
      • LSParserFilter
      • LSProgressEvent
      • LSResourceResolver
      • LSSerializer
      • LSSerializerFilter
       
      Exceptions
       
      • LSException
  • org.xml.sax
  • org.xml.sax.ext
  • org.xml.sax.helpers

这两个接口解析方式大不相同: 

  DOM:解析xml文件,并构建了一个完整的节点树在内存中。相当于用树的数据结构保存了xml,对内存消耗比较大,但方便增删改查。

  SAX:一行一行的扫描xml文件,并不记录。每扫到一个特定的标签,例如:标签开始符号,字符,标签结束符号。就会调用特定的事件处理程序(这应该是应用了观察者设计模式:扫描器是subject,处理程序是observer。)所以这样处理,速度快,内存消耗小。但他是一次且顺序的扫描,这样就不适合做随机的增删改查。

开发包(框架)

  JAXP:Java API for XML Processing,在javax.xml包及此子包中实现了这些接口。

    DOM:通过工厂方法获取文档树,再操作其中元素。

 Document parse = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("catalog.xml"); //获取tag
NodeList tag= parse.getElementsByTagName("OPTIONS");Node item = tag.item(1);System.out.println(item.getTextContent());

    SAX:通过工厂方法获取文档解析器,实现事件处理接口,在解析即可。

// 通过工厂获得解析器SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();// 得到读取器XMLReader reader = saxParser.getXMLReader();// 设置内容处理器BeanListHander handler = new BeanListHander();reader.setContentHandler(handler);// 读取reader.parse("exam.xml");

  DOM4J:开源框架,集成了DOM和SAX,且支持XPath(一种语言,可以像正则表达式一样快速搜索XML中的节点,详细:Zvon tutorial),功能强大,性能优异。

dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.

dom4j is an Open Source XML framework for Java. dom4j allows you to read, write, navigate, create and modify XML documents. dom4j integrates with DOM and SAX and is seamlessly integrated with full XPath support.

  反正就是很厉害,又容易使用,成为解析XML首选。如何使用?建议看他文档中的Quick Start Guide!

转载于:https://www.cnblogs.com/havener/archive/2013/03/11/2953840.html

XML与Java 解析方式相关推荐

  1. XML文件的解析方式

    XML文件4种解析方式分别是:DOM解析,SAX解析,JDOM解析,DOM4J解析. 1.基础方法: DOM:与平台无关的官方的解析方式. SAX:Java平台提供的基于事件驱动的解析方式. 2.扩展 ...

  2. XML的四大解析方式浅析

    通过解析如下xml文档浅析四大解析方式 <?xml version="1.0" encoding="UTF-8"?> <bookstore&g ...

  3. java中解析xml解读,java解析xml(JDOM)

    下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档. 为了简单,我用了如下XML作为要解析的XML文件: rjzjh 60.0 够简单的吧,但它对于我们关心 ...

  4. xml几种解析方式的优缺点

    现在解析XML的主流的方法有DOM.SAX.JDOM和DOM4J 1.DOM [优点]       ①应用程序可以其对数据和结构进行更改.       ②访问是双向的,可以在任何时候在树中上下导航,获 ...

  5. spring用xml还是java_Spring中如何混用XML与Java装配方式

  6. xml的三种解析方式

    本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...

  7. java解析xml技术(一)

    最近在做xml的解析工作,过去一直没有认真学习过xml,但是xml确实是一种很方便优秀的数据保存格式,对数据的描述非常清晰,我们是时候了解它的奥秘了. xml是一种数据的保存格式,只关注数据的内容,不 ...

  8. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  9. java 解析xml技术

    最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表 ...

  10. Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)

    Android:JSON 简介 & 解析方式 讲解(Gson.AS自带org.json.Jackson) 前言 现今最主流的数据交换格式 非 JSON莫属 今天,我将全面介绍 JSON &am ...

最新文章

  1. C语言:随笔10--共用体
  2. icinga的idoutils插件
  3. Oracle闪回技术(笔记)
  4. #region 常量和静态变量静态类readonly
  5. Linux学习之01_基础命令介绍
  6. js生成随机密码,密码位数自定
  7. TreeMap按照value进行排序
  8. 关于电脑软件的一些实用推荐(二)
  9. Base64、Blob、File 三种类型的相互转换 最详细
  10. LabVIEW编程LabVIEW开发 Kepco ABC程控电源 例程与相关资料
  11. 漫步者耳机打开网页媒体自动关机
  12. Ubuntu 14.04 下的MAC OS X 主题安装
  13. 为啥外包喜欢php,为什么要面向对象?
  14. Android Room的使用
  15. Redmi AC2100通过ssh安装Breed
  16. 概率论—贝叶斯定理 解析
  17. php 框架效率测试,关于DoitPHP,ThinkPHP,Yii,CI,DooPHP等框架的性能对比测试
  18. 数据库统计结果每日定时发送到指定邮箱
  19. System Reliability - One Crash per Thousand Server Years
  20. 16位先行进位加法器--原理篇

热门文章

  1. [工具向]__申请,下载,使用百度地图api
  2. 总结---Django部分
  3. 把数组变换成字符串(8)
  4. 数值类型小数点后是否可以接零问题
  5. 1203.1——条件语句 之 if语句
  6. JS的IE和FF兼容性问题汇总
  7. APICS与AX的Master Planning(一)--Phantom bill of Material 虚项
  8. Lync 2010迁移Lync 2013 PART5:支持旧版Lync
  9. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.3节一个团队,一种语言...
  10. 1.2 cacti安装