• Java精选笔记_XML基础


    XML基础

    XML概述


    W3C组织简介


    W3C是World Wide Web Consortium(万维网联盟)的缩写,它是对网络标准定制的一个非赢利组织,如HTML、XHTML、CSS、XML的标准就是由W3C来定制。
    由W3C正式发布的标准称为W3C推荐标准。


    什么是XML


    是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性
    是一种通用的数据交换格式,可以使数据在各种应用程序之间轻松地实现数据的交换。

    XML与HTML的比较


    HTML中的标记是用来显示数据的,而XML中的标记用来描述数据的性质和结构。
    HTML是不区分大小写的,而XML是严格区分大小写的。
    HTML可以有多个根元素,而格式良好的XML有且只能有一个根元素。
    HTML中,属性值的引号是可用可不用的,而XML中,属性值必须放在引号中。
    HTML中,空格是自动过滤的,而XML中,空格则不会自动删除。
    HTML中的标记是预定义的,而XML中的标记是可以随便定义的,并且可扩展。
    注意:XML不是HTML的升级,也不是HTML的替代产品,它们的应用领域和范围完全不同


    XML语法


    文档声明


    在一个完整的XML文档中,必须包含一个XML文档声明,这个声明表示该文档是一个XML文档,以及该文档遵循哪个XML版本的规范。

    XML文档声明的语法格式如下所示:
    <?xml 版本信息[编码信息][文档独立性信息]?>
    从上面的语法格式中可以看出,文档声明以符号“<?”开头,以符号“?>”结束,中间可以声明版本信息,编码信息以及文档独立性信息。

    一个完整的XML声明如下所示:
    <?xml version="1.0" encoding="gb2312" standalone="yes"?>
    版本声明version、文档编码声明encoding、独立文档声明standalone默认为no

    注意:XML声明必须位于文档的第一行,前面不能有任何字符。在XML声明时,如果同时设置了encoding和standalone属性,standalone属性要位于encoding属性之后。


    元素定义


    在XML文档中,主体内容都是由元素(Element)组成的。
    元素一般是由开始标记,属性,元素内容和结束标记构成,具体示例如下:
    <城市>北京</城市>

    需要注意的是,如果一个元素没有嵌套在其它元素内,则这个元素称为根元素,根元素是XML文档定义的第一个元素。

    一个元素中如果没有嵌套子元素,也没有包含文本内容,则这样的元素称为空元素,空元素可以不使用结束标记,例如:<img></img>可以简写成<img/>。



    在XML文档中,元素的名称可以包含字母、数字以及其它一些可见的字符,但是在命名XML元素时,应该遵守以下规范:
    (1)区分大小写,例如:<P>和<p>是两个不同的标记。
    (2)元素名称中,不能包含空格、冒号、分号、逗号和尖括号等,元素不能以数字开头,否则XML文档会报错。
    (3)建议不要使用“.”,因为在很多程序语言中,“.”用于引用对象的属性。
    (4)建议不要用减号(-),而以下划线(_)代替,以避免与表达式中的减号(-)运算符发生冲突。
    (5)建议名称不要以字符组合xml(或XML、或Xml等)开头。
    (6)建议名称的大小写尽量采用同一标准,要么全部大写,要么全部小写。
    (7)名称可以使用非英文字符,例如中文,但有些软件可能不支持非英文字符以外的字符,在使用时应考虑这种情况。


    属性定义


    在XML文档中,可以为元素定义一个或多个属性,属性是对元素的进一步描述和说明,每个属性都有自己的名称和取值,具体示例如下:
    <售价 单位="元">68</售价> 

    需要注意的是,在XML文档中,属性的命名规范同元素相同,属性值必须要用双引号(“”)或者单引号(‘’)引起来,否则被视为错误。

    属性还可以通过子元素的形式来描述同样的信息,将属性定义的示例代码改写为以下代码,具体如下:
    <售价>
        <价格>68</价格>
        <单位>元</单位>
    </售价>


    注释


    被注释的内容会被程序忽略而不被解析和处理
    XML注释和HTML注释写法基本一致,具体语法格式如下所示:
    <!--注释信息-->

    注意:
    1、注释不能出现在XML声明之前,XML声明必须是文档的第一行
    2、注释不能出现在标记中
    3、字符串“--”不能在注释中出现
    4、在XML中,不允许注释以“--->”结尾
    5、注释不能嵌套使用,因为第一个“<!--”会匹配在它后面第一次出现的“-->”作为一个完整的释符


    特殊字符处理


    在XML文档中,表示这些特殊字符的转义字符序列称为预定义实体。
    &:&armp、<:&lt、>:&gt、":quot、':apos

    CDATA区


    Character Data的简写,即字符数据,CDATA区指的是不想被程序解析的一段原始数据,它以“<![CDATA[”开始,以“]]>”结束。

    特殊字符出现在该区中不用使用转换字符,提高了xml文档的可读性


    DTD约束


    什么是约束


    在XML文档中,定义了一套规则来对文档中的内容作出限制约束,这套约束称为XML约束。


    DTD约束


    最常用的两种约束语言是DTD约束和Schema约束。
    DTD约束是早期出现的一种XML约束模式语言,根据它的语法创建的文件称为DTD文件。


    在一个DTD文件中,可以包含元素的定义、元素之间关系的定义、元素属性的定义以及实体和符号的定义。
    使用DTD文件约束XML文档,必须在XML文档中引入DTD文件。在XML文档中引入外部DTD文件有两种方式: 
    (1)<!DOCTYPE 根元素名称 SYSTEM  "外部DTD文件的URI">
    (2)<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">


    DTD语法


    文档声明


    1.内部DTD,在XML文档内部嵌入DTD,只对当前 XML有效。
    2.外部 DTD一本地 DTD ,DTD文档在本地系统上,公司内部自己项目使用 。
    3.外部DTD一公共DTD ,DTD 文挡在网络上, 一般都有框架提供 。


    元素定义


    在DTD定义中,每一条<!ELEMENT…>语句用于定义一个元素,其基本的语法格式如下所示:
    <!ELEMENT 元素名称 元素内容>


    “元素内容”共有五种内容形式,具体如下:
    (1)#PCDATA:表示元素中嵌套的内容是普通文本字符串
    (2)子元素:说明元素包含的元素
    (3)混合内容:表示元素既可以包含字符数据,也可以包含子元素
    (4)EMPTY:表示该元素既不包含字符数据,也不包含子元素,是一个空元素
    (5)ANY:表示该元素可以包含任何的字符数据和子元素


    在定义元素时,“元素内容”中可以包含一些符号,其中常见的符号具体如下:
    问号[?]:表示该对象可以出现0次或1次。
    星号[*]:表示该对象可以出现0次或多次。
    加号[+]:表示该对象可以出现1次或多次。
    竖线[|]:表示列出的对象中选择1个。
    逗号[,]:表示对象必须按照指定的顺序出现。
    括号[()]:用于给元素进行分组。


    属性定义


    设置说明
    定义元素的属性时,有四种设置说明可以选择,具体如下:
    1)#REQUIRED:表示元素的该属性是必须的
    2)#IMPLIED:表示元素可以包含该属性,也可以不包含该属性
    3)#FIXED:表示一个固定的属性默认值,在XML文档中不能将该属性设置为其它值。
    4)默认值:和FIXED一样,如果元素不包含该属性,该属性将被自动设置为DTD中定义的默认值

    属性类型
    1)CDATA
    这是最常用的一种属性类型,表明属性类型是字符数据,与元素内容说明中的#PCDATA相同。
    2)Enumerated(枚举类型)
    在声明属性时,可以限制属性的取值只能从一个列表中选择,这类属性属于Enumerated(枚举类型)。需要注意的是,在DTD定义中并不会出现关键字Enumerated。
    3)ID
    一个ID类型的属性用于唯一标识XML文档中的一个元素。其属性值必须遵守XML名称定义的规则。一个元素只能有一个ID类型的属性,而且ID类型的属性必须设置为#IMPLIED或#REQUIRED。
    4)IDREF和IDREFS
    5)NMTOKEN和NMTOKENS
    NMTOKEN是Name Token的简写,它表示由一个或者多个字母、数字、句点(.)、连字号(-)或下划线(_)所组成的一个名称。NMTOKENS关键字表示一种列表类型。一个元素的NMOTOKENS类型的属性设置值可以是同一个XML文件中的另外多个NMTOKEN类型的属性的设置值,每个NMTOKEN属性值之间用空格分隔。
    6)NOTATION
    通过设置NOTATION类型的属性来让一个外部应用程序进行处理。在DTD文件中,NOTATION定义语句分为两种情况,具体如下:
    第一种情况:<!NOTATION 符号名 SYSTEM "MIME类型">
    第二种情况:<!NOTATION 符号名 SYSTEM "URL路径名">
    7)ENTITY和ENTITYS
    ENTITY对应的中文意思为实体,当某个属性的类型设置为ENTITY时,表明其属性值必须为在DTD中使用<!ENTITY …>语句定义的一个实体(entity)的引用。



    实体定义

    引用实体
    引用实体的定义方式如下所示:
    (1)<!ENTITY 实体名称 "实体内容">
    (2)<!ENTITY 实体名称 SYSTEM "外部XML文档的URL">


    引用实体用于解决XML文档中内容重复的问题,其引用方式方法为:
    &实体名称;


    参数实体
    参数实体只能被DTD文件自身使用,它的语法格式如下所示:
    <!ENTITY % 实体名称 "实体内容">
    注意:在声明参数实体时,ENTITY、%、实体名和“实体内容”之间各有一个空格。
    引用参数实体的方式是:%实体名称;


    Schema约束


    什么是Schema约束


    XML Schema与DTD比较,具有下列优点:
    (1)DTD采用的是非XML语法格式,而XML Schema采用的是XML语法格式,而且它本身也是一种XML文档。
    (2)DTD和XML Schema都用于对XML文档进行描述,都被用作验证XML合法性的基础。但是,DTD本身合法性的验证必须采用另外一套机制,而XML Schema则采用与XML文档相同的合法性验证机制。
    (3)XML Schema对名称空间支持的非常好,而DTD几乎不支持名称空间。
    (4)DTD支持的数据类型非常有限。
    (5)DTD定义约束的能力非常有限,无法对XML实例文档作出更细致的语义限制。
    (6)Schema是新的XML 文档约束:Schema 要比 DTD 强大很多,是 DTD 替代者 ;

    名称空间


    什么是命名空间

    名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元索和属性都有自己的名称空间,那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。


    它可以唯一标识一个元素或者属性。声明名称空间的语法如下所示:
    <元素名 xmlns:prefixname="URI">


    Schema语法


    元素定义


    Schema和DTD一样,都可以定义XML文档中的元素。在Schema文档中,元素定义的语法格式如下所示:
    <xs:element name="xxx" type="yyy"/>

    element用于声明一个元素,xxx指的是元素的名称,yyy 指元素的数据类型。

    在XML Schema 中有很多内建的数据类型,其中最常用的有以下几种: 
    xs:string:表示字符串类型
    xs:decimal:表示小数类型
    xs:integer:表示整数类型
    xs:boolean:表示布尔类型
    xs:date:表示日期类型
    xs:time:表示时间类型

    XML的示例代码,具体示例如下:
    <lastname>Smith</lastname>
    <age>28</age>
    <dateborn>1980-03-27</dateborn>
    这三个元素对应的Schema定义如下所示:
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="age" type="xs:integer"/>
    <xs:element name="dateborn" type="xs:date"/> 

    属性定义


    在Schema文档中,属性定义的语法格式如下所示:
    <xs:attribute name="xxx" type="yyy"/>
    element用于声明一个元素,xxx指的是元素的名称,yyy 指元素的数据类型。

    XML的简单例子,具体示例如下所示:
    <lastname lang="EN">Smith</lastname>
    应的Schema定义方式如下所示:
    <xs:attribute name="lang" type="xs:string"/>


    简单类型


    (1)xs:minInclusive和xs:maxInclusive元素对值的限定

    (2)xs:enumeration元素对一组值的限定

    (3)xs:pattern元素对一系列值的限定

    (4)xs:restriction元素对空白字符的限定
    如果需要对空白字符(whitespace characters)进行处理,可以使用 whiteSpace元素。whiteSpace元素有三个属性值可以设定,分别是preserve、replace和collapse。

    复杂类型


    (1)空元素
    指的不包含内容,只包含属性的元素,具体示例如下:
    <product prodid="1345" />
    (2)包含其它元素的元素
    (3)仅包含文本的元素
    (4)包含元素和文本的元素



    dom4j


    XML解析概述


    当将数据存储在XML后 ,我们就希望通过程序获得XML的内容。如果我们使用 Java 基础所学习的IO知识是可以完成的 ,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题 (只读、读写)。人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作 XML。

    解析方式和解析器


    开发中比较常见的解析方式有三种,如下 :
    1. DOM: 要求解析器把整个XML文档装载到内存,并解析成一个Document 对象 。
    a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作 。
    b) 缺点: XML文档过大,可能出现内存溢出显现 。
    2. SAX: 是一种速度更快,更有效的方法,它逐行扫描文档,一边扫描一边解析 。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件.
    a) 优点 : 处理速度快,可 以处理大文件
    b) 缺点 : 只能读 ,逐行后将释放资源 。
    3.PULL: Android内置的XML解析方式,类似 SAX.
    解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包 。

    DOM解析原理及结构模型


    XML DOM和HTML DOM 类似,XMLDOM 将整个XML文档加载到内存,生成一个 DOM 树,并获得一个Document对象,通过Document对象就可以对 DOM 进行操作.

    DOM 中的核心概念就是节点,在XML文档中的元素、属性、文本等,在DOM中都是节点!


    API使用
    1.如果需要使用dom4j,必须导入jar包。
    2.dom4j必须使用核心类SaxReader加载xml文档获得 Document,通过Document对象获得文档的根元素,然后就可以操作了 

  • 相关阅读:
    201-STM32+Air724UG基本控制篇(阿里云物联网平台)-设备使用物模型Topic上报温湿度数据
    Sentinel Go 核心统计结构滑动窗口的深度解析
    golang sync.Mutex互斥锁的实现原理
    Golang-Scheduler原理解析
    Golang-Channel原理解析
    golang里channel的实现原理
    最长回文子序列
    GO语言的goroutine并发原理和调度机制
    golang 常见问题
    通过js给网页加上水印背景
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7582129.html
Copyright © 2020-2023  润新知