Java XML解析技术

本文深入探讨了Java中XML的解析技术,包括DOM、SAX和StaX等不同解析方式的原理与应用,同时提供了实战示例,帮助读者理解如何在Java项目中有效地处理XML文件。
摘要由CSDN通过智能技术生成
                                        **Java XML解析技术**

                    **XML概述**
随着软件程序从独立的单机应用程序演化为分布式的企业系统,开发人员开始要面对一系列新的挑战。应用程序不再仅仅运行于一台机器上,而是会运行于多台机器上,并且这些机器的硬件架构、操作系统还可能不一样。这样,开发人员的挑战就是要定义一种通用的机制,使得采用不同编程语言编写的、运行于不同操作系统平台上的应用程序之间可以相互通讯。
假如所有的应用程序都是用Java编写的,我们的工作就会变得很简单。我们知道,Java是被设计用在统一的虚拟机上的,而该虚拟机的职责就是把Java表示的数据转换成操作系统认识的数据。Java用4个字节表示整数,而有些编程语言却是用2个字节表示整数,那么我们如何解释丢失的2个字节呢?Windows和Unix操作系统对数据字节表示的底层解释是不同的:对于4个字节的整数的各个位数,这两种操作系统的解释互不相同,因此所产生的结果值是不同的。
在现实中,应用程序可能是用Java编写的,还有可能是用C#、VB、Delphi、C、C++等编程语言编写的。考虑直接与硬件对话的那一类应用程序:这类应用程序需要直接与底层操作系统交互,需要理解硬件所处的计算机架构。这只是一类无法使用Java的情况,另外一类情况是软件所运行的操作系统还没有开发Java虚拟机。
我们已经了解了一些我们所面临的挑战,现在我们继续想想,怎样在两个应用程序之间无二义性地传递数据呢?假设要传递带有值65的变量speed,那么我们就要尝试传输两个数据:值65,该值代表速度。前面已经提到过,不能把整型值当成一系列二进制位传递。那么,能不能把数据当作字符串(字符6后面跟着字符5)发送呢?不管操作系统及编程语言是什么,字符5总是一样的。
XML(可扩展标记语言,eXtended Markup Language)是当今出现的最重要的十大软件开发技术之一。它是一种允许Web应用程序开发人员创建自定义标记,以便更有效组织和传递内容的语言。在XML文档中,用户可以定义自己需要的标记,创造自己的标记语言,只要在定义标记时遵循XML规范即可。XML定义了一套元句法,这些符合规范的XML文档能够很容易地被应用程序统一解析。这样,数据的存储和传输就有章可循。
XML由于简洁高效,能够用纯文本的形式表现各种复杂的有层次的数据及其之间的相互关系,易于在各个平台上构造和解析,因此在数据交换、结构化数据存储与显示、内容呈现与显示格式分离等方面得到了广泛的应用。

                     **XML语法规则**
一个XML文档由两个部分组成:一个部分是序言,包括XML文档声明、注释、空白;另一个部分是文档元素,这两个部分是必须的。此外,我们还可以选择性地包含注释、处理指令和空白。

                 XML声明
XML文档声明由“<?xml”开始,以“?>”结束。这个声明的作用在于告诉XML处理程序:该文档是按照XML文档规范对数据进行组织的。
XML声明有版本号(version)、独立文档声明(standalone)和编码声明(encoding)三个属性。属性是由等号分开的名称-数值对,位于等号左边的是属性名,而其值位于等号的右边,并用双引号括起来。
版本声明指明文档所采用的XML版本号,必须排在第一位。目前1.0是唯一可用的版本。这个属性是XML文档声明必需的。
编码声明则指明该文档所使用的编码方式,是可选属性。XML默认的字符集是Unicode。Unicode是一种双字节字符,可以标识当今使用的大多数字符,包括汉字。UTF-8是Unicode的压缩版本,而UTF-16则是Unicode的双字节编码实现。如果文档不使用默认的Unicode编码方式,则必须为encoding属性指定一个编码方式。简体中文采用GB2312编码,繁体中文则采用BIG5编码。对于某些XML处理程序而言,GB2312有时候会出现中文乱码的情况,所以我们应该根据实际情况选择合适的编码方式:UTF-8、UTF-16、GB2312、BIG5或者ISO8859-1。
独立文档声明指明文档是否有外部的标记声明文件相配套使用,属性取值为“yes”或“no”。如果standalone的值为yes,代表所有的文档都在一个文件里完成。这个属性也是可选属性。
XML声明是大小写敏感的,不可以用“<? XML”或者其它形式。而且,XML声明必须在文档的最前面,之前不能出现任何的空白或者注释。

                 XML文档注释
XML文档注释以“<!--”开始,以“-->”结束。在XML文档被XML处理程序解析时,这些注释内容会全部被忽略不显示。当我们希望XML文档中的某些内容被解析器忽略时,可以使用注释的方式。
注释内容不能出现在XML声明之前,也不能放在任何标记当中。但是,可以包围和隐藏标记。
值得注意的是,在注释的内容中不要出现“--”或者“-”,因为容易混淆;不要把注释放在原有标记中间,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开源项目TinyXml项目所涉及的字符编码说明如下: 1. TinyXml函数调用接口的字符型参数,仅支持`窄字符`格式(char*),不兼容`宽字符`格式(wchar_t*)。 2. TinyXml函数提供的Xml内容解析功能,仅支持以ANSI编码和UTF8编码的Xml字符串,也即`多字节编码`。 3. TinyXml函数提供的Xml内容解析功能,不支持内容以UTF16编码和UTF32编码的Xml字符串,也即`Unicode编码`。 4. UTF8编码是Unicode编码的一种实现方式,以不定个数的字节来存储一个Unicode码,支持多国语言文字。 也即,UTF8编码在编码实现上属于`多字节编码`,在编码标准上属于`Unicode编码`。 5. 人类语言中同一个的字符,如果在各种不同的标准如ANSI编码、UTF8编码、UTF16编码和UTF32编码中都存在码, 就可以相互转换。因为各个标准下的可编码字符容量不同,部分语言字符会在一个编码标准库下存在, 而在另外一个编码标准库下不存在,这时精确的相互转换就无法执行,但是仍然有默认字符转换。 -- 6. VC语言,当定义了宏 _UNICODE 后,_T系列宏或函数,以`宽字符`承载UTF16编码。 TinyXml如何提供`宽字符`函数接口,支持解析UTF16编码、UTF32编码标准下的Xml字符串呢? 本项目: - 新增适用于`宽字符`参数的函数接口,调用字符集转换功能,转换为`窄字符`参数,再回调TinyXml原版接口。 - 对于以UTF16编码、或UTF32编码的Xml字符串,转换为UTF8编 --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值