XML(Extensible Markup Language)

XML简介

        XML(Extensible Markup Language)即可扩展标记语言,是一种简单的存储语言, 使用一系列简单的标记来描述结构化数据。

XML的特点

  • XML与操作系统、编程语言的开发平台都无关
  • 规范统一,实现不同系统之间的数据交互

XML技术应用广泛,最基本的如网站,应用程序的配置信息一般采用XML文件描述。

一、XML的文件结构

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!-- 图书信息 -->
    <book id="bk101">
        <titile>.NET高级编程</titile>
        <author>王珊</author>
        <description>包含C#框架和网络编程等</description>
    </book>
    <book>
        <book id="bk102">
            <titile>XML基础编程</titile>
            <author>李明明</author>
            <description>包含XML基础概念和基本用法</description>
        </book>
    </book>
</books>

1. XML声明

<?xml version="1.0" encoding="UTF-8"?>:表示XML声明,用以表明该文件的一个XML文档。XML文档总是以XML声明开始,它定义了XML的版本和所使用的编码等信息。

XML声明由以下几个部分组成:

version:文档符合 XML1.0 规范

encoding:文档字符编码,默认为UTF-8

对于任何一个XML文档,其声明部分都是固定格式

2. 标签

        在 XML 中,通过用尖括号<>括起来的各种标签(Tag)来标记数据,标签成对使用来界定字符数据。例如,<author>王姗</author>中,<author>是开始标签,</author>是结束标签,“王珊”是标签描述的内容,表示作者信息。

注意:

XML标签必须正确结束并正确地嵌套,缺少结束标签及如下的嵌套方式是错误的。

3. 元素

        XML文档的主要部分是元素,如<author>王珊</author>就是一个元素,元素由开始标件,结束标签和元素内容组成。开始标签由 ">" + "元素名" + ">" 组成,结束标签比开始标签在 "<" 和 "元素名" 之间多一个 "/" 。元素内容指开始标签和结束标签之间的内容,可以包含子元素、字符数据等。

元素的命名规则如下:

  • 名称中可以包含字母、数字或其他的字符
  • 名称不能以数字或标点符号开始
  • 名称不能以字符"XM“(或 XML、Xml)开始
  • 名称中不能包含空格

元素允许是空元素,如<tite></title>,<title/>的元素写法是允许的,

4. 根元素

每个XML文档必须有且仅有一个根元素,如"<books></books>”

根元素的特点如下:

  • 根元素是一个完全包括文档中其他所有元素的元素
  • 根元素的起始标签要放在所有其他元素的起始标签之前
  • 根元素的结束标签要放在所有其他元素的结束标签之后

5. 属性

        在描述图书信息的 XML 文档中,<book id="bk101">这个标签使用 id属性描述图书的编号信息,属性定义的语法如下。

语法:

<元素名 属性名="属性值">

属性值用双引号包裹。

注意:

  • 一个元素可以有多个属性,多个属性之间用空格隔开,基本格式如下:                             <元素名 属性名="属性值"属性名="属性值"/>
  • 属性值中不能直接包含 <、"、&
  • 属性可以加在任何一个元素的起始标签上,但不能加在结束标签上

6. XML中的特殊字符的处理

        在 XML 中,有时在元素的文本中会涉及一些特殊字符(如<、>、’、”、&),而 XML文档结构构本身就用到这几个特殊字符,这会引起文档结构解析错误。有以下两种办法可以正常的解析包含特殊字符的内容。

(1)对这5个字符进行转义,也就是使用XML中的预定义实体代替这些字符。XML中的彌包含特殊字符的内容。定义实体和特殊字符的对应关系如下表所示。

预定义实体和特殊字符的对应关系

特殊字符实体名称
<&lt;
>&gt;
&&amp;
"&quot;
'&apos;

(2)在元素的文本中使用CDATA节处理,CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标签。定义 CDAIK节的语法如下(推荐)

语法:

<![DATA[

        要显示的字符

]]>

7. XML 中的注释

注释的语法如下。

语法:
<!-- 注释内容 -->

8. 格式良好的 XML文档

格式良好的 XML 文档需要遵循如下规则。

  • 有 XML声明语句
  • 有且仅有一个根元素
  • 标签大小写敏感
  • 属性值用双引号包裹
  • 标签成对/空标签关闭
  • 元素正确嵌套

XML应用

        XML独立于计算机平台、操作系统和编程语言来表示数据,凭借其简单、可扩展、交互性和灵活性在计算机行业中得到了广泛的支持和采纳。XML基于文本格式,允许开发人员描述结构化数据并在各种应用之间发送和交换这些数据,使不同系统之间交互数据具备了统一的格式

XML的应用场景主要体现在以下几点:

  • 数据存储:XML与文件、数据库一样,都可以实现数据的持久化存储。XML 极其简单,正是这点使 XML 与众不同。
  • 数据交换:在实际运用中,由于各个计算机所使用的操作系统、数据库不同,因此数据之间的交换是很复杂的。现在可以使用XML来交换数据,如可以将数据库 A 中的数据转换成标准的 XML 文件,然后数据库B再将该标准的L文件转换成适合自己数据要求的数据,以达到交换数据的目的。再比如,气象部门发布了天气预报信息,不同的系统(计算机、手机)及不同的软件和各种网站都可以去读取和显示这些信息,正是因为天气预报信息是以XML格式存储的,才使不同系统、不同软件都能解析统一格式的数据并显示。
  • 数据配置:许多应用都将配置信息存储在XML文件中。

解析 XML 概述

        在实际应用中,经常需要对 XML 文档进行各种操作,如在应用程序启动时读取 XML 配置文件信息,或者把数据库中的内容读取出来转换为 XML 文档形式,这些时候都会用到 XML 文档的解析技术。

目前常用的 XML 解析技术有4种:

1. DOM

        DOM 是基于 XML的树结构完成解析的,DOM 解析 XML 文档时,会根据读取的文档构建一个驻留内存的树结构,然后就可以使用 DOM API 来操作这个树结构。因为整个文档的树结构是驻留在内存中的,所以韭常方便于各种操作,支持删除、修改、重新排列等多种功能:DOM解析XML的方式非常适用于多次访问XML的程序但是 DOM 解析却是比较消耗资源的

2. SAX

        SAX 是基于事件的解析,它是为了解决 DOM 解析的资源消耗而出现的。它不像 DOM 那样需要建立一棵完整的文档树,而是通过事件处理器完成对文档的解析。因为SAX解析不用事先调入整个文档,所以它的优势就是占用资源少,内存消耗小。一般在解析数据量较大的 XML 文档时会采用这种方式。

注意:

DOM 是 W3C 组织提供的解析 XML 文档的标准接口,SAX 是社区产物,但也是一种事实的标准。DOM 和 SAX 只是定义了一些接口,以及部分默认实现(使用空方法实现接口)。

3. JDOM

        DOM 是不针对语言的,而JDOM 是针对Java的特定文档模型,它简化了与 XML 的交互并且比使用 DOM 更快。JDOM 与 DOM 有两方面不同,首先,JDOM 仅使用具体类而不使用接口。这在某些方面简化了 API,但是也限制了灵活性。其次,API大量使用了Java集合类型,对于那些已经熟悉这些类的 Java 开发者而言简化了使用。JDOM 的优势在于"使用 20%的精力解决 80%的 Java/XML 问题"。

4. DOM4J

        DOM4J是一个非常优秀的Java XML API,具有性能优异功能强大和易用的特点,同时它也是一个开源库。
        DOM4J用于在 Java 平台上使用Java集合框架处理XML、XPath 和 XSLT ,并与 DOM、SAX 和 JAXP 完全集成。DOM41大量使用接口,面向接口编程使它比 JDOM 更加灵活。如今越来越多的 Java 软件部在使用 DOM4 来读写 XML ,特别值得一提的是 Sun 的 JAXM 也在使用 DOM4。

使用 DOM 解析 XML时主要使用以下对象。

(1)Node对象

        Node 对象是 DOM 结构中最基本的对象,代表了文档树中的一个抽象节点。在实际使用的时候,很少会真正用到 Node 这个对象,一般会用到如 Document、Element、Text 等 Node 对象的子对象来操作文档。Node 对象的主要方法如下:

  • getchildNodes():返回包含此节点所有子节点的 Nodelist
  • getFirstchild():如果节点存在子节点,则返回第一个子节点
  • getLastChild():如果节点存在子节点,则返回最后一个子节点
  • getNextsibling():返回在 DOM 树中这个节点的下一个兄弟节点
  • getPreviousSibings():返回在 DOM 树中这个节点的上一个兄弟节点
  • getNodeName():返回节点的名称
  • getNodeValue():返回节点的值
  • getNodeType():返回节点的类型

(2)NodeList 对象

        顾名思义,Nodelist 对象是指包含了一个或多个节点(Node)的列表。可以简单地把它看成一个 Node 数组,也可以通过方法来获得列表中的元素,Nodelist 对象的常用方法如下。

  • getLength():返回列表的长度。
  • item(int index):返回指定位置的 Node 对象。

(3)Document 对象

         Document 对象代表整个 XML 文档,所有其他的 Node 都以一定的顺序包含在 Document 对象之内,排列成一个树状结构,可以通过遍历这棵"树"来得到 XML 文档的所有内容。它也是对 XML 文档进行操作的起点,人们总是先通过解析XML源文件得到一个 Document 对象,然后来执行后续的操作,Document 对象的主要方法如下。

  • getElementsByTagName(String name):返回一个 NodeList 对象,它包含了所有给定标签名称的标签。
  • getDocumentElement():返回一个代表这个 DOM 树的根节点的 Element 对象,也就是》代表 XML 文档根元素的对象。

(4)Element 对象

        Element对象代表 XML 文档中的标签元素,继承自 Node ,也是 Node 最主要的子对象。在标签中可以包含属性,因而 Element 对象中也有存取其属性的方法,如下所示。

  • getAttribute(String attributename):返回标签中给定属性名称的属性的值。
  • getElementsByTagName(String name):返回具有给定标签名的所有后代 Elements 的NodeList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值