因 为XML实在是太重要了,而且被广泛应用!不论是数据存储,还是其他方面,如配置文件等。XML是一种对独立于任何编程语言的数据进行编码的机制。在数据 交换领域,正在变得非常流行!因为他的基于节点的存储格式特点,以致于有很多适合的场合,可用它来描述。当然Java也为打包和解析XML文件做了很好的 支撑!本章系Java之美[从菜鸟到高手演变]系列之XML的打包与解析,学完本章,你会基本掌握XML的大部分操作!

在阅读过程中有任何问题,请及时联系:egg。

邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef

转载请说明出处:http://blog.csdn.net/zhangerqing

一、XML语言的特点

1、XML独立于任何编程语言,允许人们按接收者容易解析的方式,对复杂数据进行编码。先来看一个简单的XML格式的文件:

[html] view plaincopy

 
  1. <note> <to></to> <from></from> <heading></heading> <body></body> </note>

对于程序员来说,很容易读懂这是什么意思,很明显这是传递给他人的一个便签,如果我们写出下面这样:

George

John

Reminder

Don't forget the meeting!

虽然最终从XML中提取出来就是上面的内容,但是我们从上面的内容根本看不出这是什么。

2、数据做成XML有助于改变其内容

如果我们现在想再添加一项:时间。在XML中我们可以这样:

[html] view plaincopy

 
  1. <note> <to></to> <from></from> <heading></heading> <body></body> <time></time> </note>

在我们解析的时候,只要从对应的标签“time”找就行,非常方便!这样的特点,有助于组织复杂的数据。

3、XML 与 HTML 的主要差异

XML 不是 HTML 的替代,XML 和 HTML 为不同的目的而设计,XML 被设计为传输和存储数据,其焦点是数据的内容。HTML 被设计用来显示数据,其焦点是数据的外观。HTML 旨在显示信息,而 XML 旨在传输信息。HTML的标记不是所有的都需要成对出现,XML则要求所有的标记必须成对出现,HTML标记不区分大小写,XML则 大小敏感,即区分大小写。

4、XML 文档是一种树结构

上图表示下面的 XML 中的一本书:

[html] view plaincopy

 
  1. <bookstore> <book=> <title=></title> <author></author> <year></year> <price></price> </book> <book=> <title=></title> <author></author> <year></year> <price></price> </book> <book=> <title=></title> <author></author> <year></year> <price></price> </book> </bookstore>

二、XML的解析技术

1、大名鼎鼎的DOM技术

说它大名鼎鼎可是一点不为过,DOM 是 W3C 处理 XML 的标准 API,它是许多其它与 XML 处理相关的标准的基础,不仅是 Java,其它诸如 JavaScriptPHP,MS .NET 等等语言都实现了该标准, 成为了应用最为广泛的 XML 处理方式。当然,为了能提供更多更加强大的功能,Java 对于 DOM 直接扩展工具类有很多,比如很多 Java 程序员耳熟能详的 JDOM,DOM4J 等等, 它们基本上属于对 DOM 接口功能的扩充,保留了很多 DOM API 的特性,许多原本的 DOM 程序员甚至都没有任何障碍就熟练掌握了另外两者的使用,直观、易于操作的方式使它深受广大 Java 程序员的喜爱。

2、绿色环保的 SAX

SAX 的应运而生有它特殊的需要,为什么说它绿色环保呢,这是因为 SAX 使用了最少的系统资源和最快速的解析方式对 XML 处理提供了支持。 但随之而来繁琐的查找方式也给广大程序员带来许多困扰,常常令人头痛不已,同时它对 XPath 查询功能的支持,令人们对它又爱又恨。

二种技术的比较:

DOM

优缺点:实现 W3C 标准,有多种编程语言支持这种解析方式,并且这种方法本身操作上简单快捷,十分易于初学者掌握。其处理方式是将 XML 整个作为类似树结构的方式读入内存中以便操作及解析,因此支持应用程序对 XML 数据的内容和结构进行修改,但是同时由于其需要在处理开始时将整个 XML 文件读入到内存中去进行分析,因此其在解析大数据量的 XML 文件时会遇到类似于内存泄露以及程序崩溃的风险,请对这点多加注意。

适用范围:小型 XML 文件解析、需要全解析或者大部分解析 XML、需要修改 XML 树内容以生成自己的对象模型

SAX

SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题。其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求。由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用。支持 XPath 查询的 SAX 使得开发人员更加灵活,处理起 XML 来更加的得心应手。但是同时,其仍然有一些不足之处也困扰广大的开发人员:首先是它十分复杂的 API 接口令人望而生畏,其次由于其是属于类似流解析的文件扫描方式,因此不支持应用程序对于 XML 树内容结构等的修改,可能会有不便之处。

适用范围:大型 XML 文件解析、只需要部分解析或者只想取得部分 XML 树内容、有 XPath 查询需求、有自己生成特定 XML 树对象模型的需求

三、实例运用
首先造一个xml文档出来:(books.xml放在项目根路径下,不是src)

[html] view
plain
copy

 
  1. <?xml= =?>
    <books>
    <book= =>
    <title></title>
    <author></author>
    </book>
    <book= =>
    <title></title>
    <author></author>
    </book>
    </books>

使用DOM进行解析

[java] view
plain
copy

 
  1. /**
  2. * the DOM Parser Example
  3. * @author egg
  4. * email:xtfggef@gmail.com
  5. * microblog:http://weibo.com/xtfggef
  6. */
    publicclass
  7. publicstaticvoid
    new
    );
  8. );
  9. ifnull
    forint; i < nodeList.getLength(); i++) {
  10. forint; j < nodeList2.getLength(); j++) {
  11. if
  12. public
    null
    try
  13. new
    catch

    catch

    catch

    return

    }

输出:

title:Harry Potter
author:J K. Rowling
title:Thinking in Java
author:Bruke

想弄懂xml的解析,需要先清楚几个概念:节点、属性,如下图:

这样结合上面的例子就容易理解了,给一个例子,大家自己去练习下:

[html] view
plain
copy

 
  1. <?xml= =?>
    <books>
    <name></name>
    <price></price>
    <author></author>
    </books>

使用SAX进行解析:

[java] view
plain
copy

 
  1. publicclass

    classextends
    private
    privatebooleanfalse

    public
    return

  2. publicvoidthrows

    new

  3. publicvoidthrows
    );
  4. publicvoid
    throws
  5. if)) {
  6. true
  7. publicvoid
    throws
  8. if
    false
  9. publicvoidcharintint
  10. if
    new

    publicstaticvoidthrows

    newnew

    );

  11. }

XML的打包

[java] view
plain
copy

 
  1. publicclass
    publicstaticvoid
    ;
  2. publicstaticvoid
    try
    newnew, ),
  3. new, ) };
  4. catch
    );
  5. * 将XML文件输出到指定的路径
  6. * @param doc
  7. * @param fileName
  8. * @throws Exception
  9. */
    privatestaticvoid
    throws

    new
    );

  10. );
  11. newnew
    new

    );

  12. * 生成XML文件
  13. * @param list
  14. * @return
  15. */
    publicstatic
    null
    null
    try

    );

  16. catch

    returnnull

  17. int

    forint; i < len; i++) {

  18. + (i + ));
  19. ,  + person.getAge());
  20. , person.getName());
  21. return

    }

四、XML的验证:DTD,XSD

XML 可扩展标记语言的更多相关文章

  1. 关于XML(可扩展标记语言)的基础知识与写法------2017-05-18

    XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示   XML:可扩展标记语言,用来做数据传输XML特点: 1.树状结构,有且只有一个根 2.标签名 ...

  2. java XML(可扩展标记语言)

    XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...

  3. XML 概述 (可扩展标记语言)

    XML:eXtensible Markup Language  可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的.        功能:            存储数据   ...

  4. 关于XML(可扩展标记语言)的基础知识与写法

    XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示   XML:可扩展标记语言,用来做数据传输XML特点:1.树状结构,有且只有一个根2.标签名自定 ...

  5. XML简介——可扩展标记语言(Extensible Markup Language)

    (What) XML是什么? XML指可扩展标记语言(Extensible Markup Language) 1.  XML是一种标记语言,类似HTML. 2.  XML具有自我描述性 3.  XML ...

  6. 可扩展标记语言XML之二:XML语言格式规范、文档组成

    大家好,小乐又来了,好久不见!这次接着上次可扩展标记语言XML之一:XML概念,作用,示例,继续讲述XML. 一.格式良好的 xml 1.语法规范: 1).必须有 XML 文档声明: <?xml ...

  7. 可扩展标记语言XML之一:XML的概念、作用与示例

    哈喽大家好啊,乐字节小乐又来给大家分享Java技术文章了.上次已经讲完了Java多线程相关知识(可以看我博客文章), 这次文章将讲述可扩展标记语言XML 一. 标记语言 标记语言,是一种将文本(Tex ...

  8. 12XML(可扩展标记语言)

    XML:eXtensible Markup Language 什么是标记语言?什么是标记? 标记(Markup):文档中任何不想被打印输出的部分(不是真正的文档内容,联想读书时做的“读书笔记”,在旁边 ...

  9. 可扩展标记语言XML

    XML简述 XML用于描述数据,是当前处理结构化文档信息的有力工具.与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互. 结构 <?xml version="1.0&qu ...

随机推荐

  1. Django之三种文件上传

    方式一: 通过form表单提交到后台 前端: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. Python网络爬虫之requests模块

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  3. 造excel表格横、列数据每一格自动累加填充效果

    1.需求 excel每个横格子和竖格子number数据不一致的情况,保持如下金额字段每次自动累加 2.步骤: 1)设置excel格子为number格式(可以不要小数) 2)选中需要增序的单元格,选择e ...

  4. JVM总结-字节码

    在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数.这个栈帧的大小是提前计算好的,而且 Java 虚拟机 ...

  5. 企业项目构建学习(一)maven

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  6. #151: 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-x

    试题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位 ...

  7. 使用Inent 携带 Bundle 携带 数组 传递给另外一个activity

    在activity发送数组: public static String [] PhoneAndTime = new String[2]; //new 新的Intent Intent data = ne ...

  8. [Unity插件]Lua行为树(七):行为树嵌套

    在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehavi ...

  9. 【powerBI】power pivot添加参数表

    背景 最近在做应用分析,爬了几个应用市场的排行榜,需要分析前多少名各个品类的app有多少个.数据量不大,excel就能做分析,所以想起来pivot的参数表功能.这个功能还是比较实用的,在这再做个记录, ...

  10. 【Excel技能】字符串包含某字符串个数?替换许多组字符串?

    =len(单元格A)-len(substitute(单元格A,某字符串,)) 原理:将某字符串替换成空,前后字符串长即为减去的这个字符串长度,这个字符串出现个数=前后字符串长度之差/这个字符串长度 = ...