Xml介绍

目录

Xml介绍

一、why(用来干什么)

二、what

1.概念:

2.XML 和 HTML对比:

三、how

1.XML语法

1.1文档声明部分

1.2元素

1.3属性

1.4实体

1.5注释

1.6CDATA

2.XML约束

2.1目的

3.xml解析

3.1 dom解析

3.2 sax解析

DOM4J


Xml介绍

一、why(用来干什么)

1.数据存储 (Android 通讯录)

2.配置文件

3.数据传输(现在以JSON为主)

二、what

1.概念:

是一种可拓展标记语言,可以用一系列的标签来对数据进行描述。

拓展,指的是用户可以自定义标签

2.XML 和 HTML对比:

(1993年)HTML超文本标记语言 , (1998年)w3c组织推出XML可拓展标记语言

  1. XML 主要是用来描述数据的

  2. HTML 主要是用来展现数据的

三、how

1.XML语法

1.1文档声明部分

<?xml version="1.0" encoding="UTF-8" ?>

1.2元素

元素,指的就是XML中的标记,这种标记也被称为标签、节点。

元素规范

  1. 不能以数字或部分标点符号开头 (_)

  2. 不能包含空格和特定的几个符号(:)

  3. 标签必须成对出现,不允许缺省结束标签

  4. 根元素有且只有一个(树结构)

  5. 大小写敏感

  6. 允许多层嵌套但是不允许交叉嵌套

注意:对于XML标签中出现的空格和换行,在XML解析程序都会当作标签内容进行处理。

1.3属性

属性基本格式:

<元素名 属性名="属性值" 属性名='属性值'>
  1. 注意:这里属性值必须加引号,可以是单引号,也可以是双引号【外双内单,外单内双(外面是双引号,里面就是单引号,外面是单引号,里面就是双引号)】

  2. 注意:使用标签还是属性来描述数据 , 对此没有强制的要求

1.4实体

格式:&实体名;

预定义实体

实体字符简介
&lt;

<

Less than

&gt;>

Greather than

&amp;&mpersand
&apos;'Apostrophe
&quot;"quotation mark

自定义实体

格式:

<!DOCTYPE 根元素名称[
<!ENTITY 实体名 实体内容>
]>

1.5注释

<!-- 注释 -->

1.6CDATA

概念:XML 解析器,会解析 XML 文档中所有的文本。 当某个 XML 元素被解析时,其标签之间的文本也会被解析。

  1. 解析器进行解析的内容,称为PCDATA(Parsed CDATA)

  2. 解析器不会解析的内容,称为CDATA,(Character Data)

语法:

<![CDATA[需要原样输出的字符串]]>

2.XML约束

2.1目的

为了不让用户去随意的定义标签,这是就要对XML的文件内容做出约束 , 就是为了让用户按照我们提前设置好的要求, 去编写XML内容。

2.2良构和有效

  1. 良构的xml只要符合语法结构即可

  2. 有效的xml,既要符合语法结构并且符合实际要求

有效包含良构

  1. 良构的XML文件不一定是有效的

  2. 有效的XML文件一定是良构的

2.3DTD

使用DTD规定了元素属性和其他内容在xml文档中的使用规则

描述元素的语法格式:

<!ELEMENT 元素名 (内容模式)>
  1. EMPTY:元素之间不能写内容(空元素)

  2. (#PCDATA):可以包含内容,但是不能包含任何子元素

  3. ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下

  4. 修饰符:() | + * ? , (元素和属性通用)

    () 用来给元素分用组

    | 在列出的元素中选择一个

    +表示该元素最少出现一次,可以出现多次 (1或n次)

    *表示该元素允许出现零次到任意多次(0到n次)

    ?表示该元素可以出现,但只能出现一次 (0到1次)

    ,对象必须按指定的顺序出现

描述属性的语法格式:

<!ATTLIST 元素名称
属性名称 属性类型 属性特点
属性名称 属性类型 属性特点>

属性类型:

  1. CDATA:属性值可以是任何字符(包括数字和中文)

  2. ID:属性值必须唯一,属性值必须满足xml命名规则

  3. IDREF:属性的值指向文档中其它地方声明的ID类型的值。

  4. IDREFS:同IDREF,但是可以具有由空格分开的多个引用。

  5. enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中

属性特点:

  1. #REQUIRED:元素的所有示例都必须有该属性

  2. #IMPLIED :属性可以不出现

  3. default-value:属性可以不出现,但是会有默认值

  4. #FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值

2.4引入

  1. DTD和XML在同一个文件中

  2. 外部的DTD,DTD和xml文档不在同一个文件中。(常用)

外部引入的方式:

  1. 本地DTD文件引入,这种方式一般都是自己编写DTD,然后自己使用。

    <!DOCTYPE students SYSTEM "dtd/students.dtd">
  2. 公共DTD文件引入,这种方式可以让很多人使用共同的一个DTD文件。

3.xml解析

3.1 dom解析

使用情况:

数据量小的xml使用dom(要整个装载 , 对内存要求高)

概述:

使用DOM方式解析,要求解析器把整个XML文档装载到一个Document对象中。Document对象包含文档元素,即根元素,根元素包含N个子元素。

根据DOM的定义,XML 文档中的每个元素都是一个节点(Node):

  1. XML文档只有一个根节点

  2. XML中每个元素都是一个元素节点

  3. XML中每个文本都是一个文本节点

  4. XML中每个属性都是一个属性节点

  5. XML中每个注释都是一个注释节点

解析步骤:

  1. 调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂

  2. 调用工厂对象的 newDocumentBuilder 方法得到 DOM 解析器对象

  3. 调用 DOM 解析器对象的 parse() 方法解析 XML 文档 parse() 方法会返回解析得到的 Document 对象

  4. 然后根据文档的结构关系和特点,调用相应的API,对其进行解析

3.2 sax解析

使用情况:

数据量大的xml使用sax

概述:

使用SAX方式解析,每当读取一个开始标签、结束标签或者文本内容的时候,都会调用我们重写的 一个指定方法,该方法中编写当前需要完成的解析操作。

直到XML文档读取结束,在整个过程中,SAX解 析方法 不会在内存中保存节点的信息和关系。

  1. 使用SAX解析方式,不会占用大量内存来保存XML文档数据和关系,效率高。

  2. 但是在解析过程中,不会保存节点信息和关系,并且只能从前往后,顺序读取、解析。

解析步骤:

  1. 获取SAXParserFactory工厂类对象,SAXParserFactory.newInstance()

  2. 使用工厂对象,创建出SAX解析器,saxParserFactory.newSAXParser()

  3. 调用解析器的parse() 解析xml文件,然后重写DefaultHandler类中的方法,进行事件处理 saxParser.parse(filePath, new DefaultHandler(){...}

DOM4J

概述

Dom4j 是一个Java的XML API,用来读写XML文件的,它是一个十分优秀的Java XML API,具有性能 优 异、功能强大和极其易使用的特点,且开源免费。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值