Xml使用与解析

XML

可扩展的标记语言,可自定义标签

​ 编程语言 机器语言 脚本语言 编译语言 解析语言

作用:

  1. 作为数据传输的标准(重要) xml格式,json格式
  2. 作为配置文件(重要)
  3. 持久化数据
  4. 简化平台变更

XML主要用来描述数据,HTML用来展示数据

框架开发者:定义约束文件,解析xml

框架使用者:根据约束文档编写有效xml文件

xml语法

1. 文档声明

XML声明文件的可选部分,如果需要,放在第一行

<?xml version="1.0" encoding="utf-8"?>
2.元素(标签)

XML元素可由数字,字母及可见字符组成。遵守规范:

  1. 不能以数字或部分标点符号开头
  2. 不能包含空格和特定的字符
  3. 标签成对出现,不允许缺省
  4. 根元素只有一个
  5. 大小写敏感
  6. 允许多层嵌套,不允许交叉嵌套

元素可以包含标签体

3.属性

描述元素的相关信息

写在开始标签中,可以有多个属性,属性值必须加单引号或双引号

含有多个相同标签时,使用 id 属性进行区分

4.实体

在XML中,一些字符拥有特殊的意义,不能直接使用

< > & ' "

自定义实体

<!DOCTYPE 根元素名称[
	<!ENTITY 实体名	实体内容
]>
5.注释
解释说明
  1. 注释内容中不出现 –
  2. 不要把注释放在标签中间
  3. 注释不能嵌套
6.CDATA

XML解析器,解析XML文档中所以文本

当某个XML元素被解析时,其标签之间的文本也会被解析

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

​ 解析器不会解析的内容,称为 CDATA (Character DATA)

当不需要解析某些内容时,写到CDATA区域中

<![CDATA[需要原样输出的文本]]>

XML约束

1.良构与有效

良构:XML内容符合语法规则

有效:在良构的基础上通过 dtd 文件或者 Schema 文件的约束验证。

良构不一定有效,有效一定良构

2.DTD(Document Type Define)

dtd 文件中描述并规定了元素,属性和其他内容的使用规则。

后缀名为 .dtd

2.1语法

描述元素的语法格式:

<!ELEMENT 元素名 (内容模式)>
  1. EMPTY:元素不能包含子元素和文本(空元素)

  2. (#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素

  3. ANY:元素内容为任意的

  4. 修饰符:() | + * ? ,

    1. ():用来给元素分用组
    2. |:在列出的元素中选择一个
    3. +:表示该元素至少出现一次(1~n)
    4. *:表示该元素出现任意次(0~n)
    5. ?:表示该元素只出现一次
    6. ,:对象必须按指定顺序出现

    不写默认一次。

描述属性的语法格式:

<!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.2引入

内部的 DTD,DTD 和 XML 文档在同一文件中(不常用)

外部的 DTD,DTD 和 XML 文档不在同一文件中(常用)

外部引入两种方式:

<!DOCTYPE 根元素 SYSTEM "DTD文件的路径">
<!DOCTYPE 根元素 public "DTD名称" "DTD文档的url">

XML解析

解析方式一般分为两种: DOM 解析 SAX 解析

DOM

DOM解析:要求解析器把整个 XML 文档装载到一个 Document 对象中。

​ 如果 XML 文档过大,那么需要把整个 XML 文档装载进内存,内存要求较高

创建 DOM 解析器工厂,得到 DOM 解析器对象,获得 Document 对象

Document document =  DocumentBuilderFactory
	.newInstance()
		.newDocumentBuilder()
			.parse(new File(path));

SAX

SAX解析:每当读取一个开始标签或者文本内容时,都会调用我们重写的指定方法。直到 XML 文档读取结束,SAX 解析都不会在内存中保存节点的信息和关系。

​ 不占用大量内存来保存 XML 文档数据和关系,效率高

​ 解析过程中,不会保存节点的信息和关系,并且只能从前往后,顺序读取解析。

 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser saxParser = saxParserFactory.newSAXParser();
        saxParser.parse(new File(path),new DefaultHandler(){
        	//通过重写方法,来完成对应的操作。
        });

DOM4J

需下载jar包,导入jar包

jar包中的 Document 类是 org.dom4j.Document

上面的 Document 类是 org.w3c.dom.Document

SAXReader reader = new SAXReader(); Document document = reader.read(file);//获取Document对象
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

decade372

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值