XML技术
概述
万维网联盟(W3C)
万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。
建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。
是Web技术领域最具权威和影响力的国际中立性技术标准机构。
到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,
如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)、
可扩展标记语言XML(标准通用标记语言下的一个子集)
以及帮助残障人士有效获得Web信息的无障碍指南(WCAG)等
xml概述
XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言
标记语言: 通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
可扩展:标签的名字是可以自定义的,XML文件是由很多标签组成的,而标签名是可以自定义的作用
- 用于进行存储数据和传输数据
- 作为软件的配置文件
作为配置文件的优势
- 可读性好
- 可维护性高
标签规则
标签由一对尖括号和合法标识符组成
标签必须成对出现
特殊的标签可以不成对,但是必须有结束标记
标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来
标签需要正确的嵌套
语法规则
语法规则
XML文件的后缀名为:xml
文档声明必须是第一行第一列
<?xml version="1.0" encoding="UTF-8" standalone="yes”?>version:该属性是必须存在的
encoding:该属性不是必须的(一般取值都是UTF-8)standalone: 该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no
必须存在一个根标签,有且只能有一个
XML文件中可以定义注释信息
XML文件中可以存在以下特殊字符
< < 小于 > > 大于 & & 和号 ' ' 单引号 " " 引号
XML文件中可以存在CDATA区,内容区可以为任何字符
<![CDATA[ …内容… ]]>
XML解析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rs7RRC07-1662607563856)(.\图解析\image-20220814134748036.png)]
概述
:xml解析就是从xml中获取到数据。
常见的解析思想
:DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值。
常见的解析工具
:
- JAXP: SUN公司提供的一套XML的解析的API
- JDOM: 开源组织提供了一套XML的解析的API-jdom
- DOM4J: 开源组织提供了一套XML的解析的API-dom4j,全称:Dom For Java
- pull: 主要应用在Android手机端解析XML
解析的准备工作
:
我们可以通过网站:https://dom4j.github.io/ 去下载dom4j
今天的资料中已经提供,我们不用再单独下载了,直接使用即可
将提供好的dom4j-1.6.1.zip解压,找到里面的dom4j-1.6.1.jar
在idea中当前模块下新建一个libs文件夹,将jar包复制到文件夹中
选中jar包 -> 右键 -> 选择add as library即可
DTD约束
编写DTD约束:
创建一个文件,这个文件的后缀名为.dtd
看xml文件中使用了哪些元素
<!ELEMENT> 可以定义元素判断元素是简单元素还是复杂元素
简单元素:没有子元素。
复杂元素:有子元素的元素;<!ELEMENT persons (person)> <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)>
引入DTD约束:
引入本地DTD约束
// 这是persondtd.dtd文件中的内容,已经提前写好 <!ELEMENT persons (person)> <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> // 在person1.xml文件中引入persondtd.dtd约束 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE persons SYSTEM 'persondtd.dtd'> <persons> <person> <name>张三</name> <age>23</age> </person> </persons>
在xml文件内部引入
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE persons [ <!ELEMENT persons (person)> <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> ]> <persons> <person> <name>张三</name> <age>23</age> </person> </persons>
引入网络dtd
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE persons PUBLIC "dtd文件的名称" "dtd文档的URL"> <persons> <person> <name>张三</name> <age>23</age> </person> </persons>
DTA语法:
定义元素:
定义属性:
- 格式:
<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
- 属性的类型:CDATA类型:普通的字符串
- 属性的约束:
- #REQUIRED: 必须的
- #IMPLIED: 属性不是必需的
- #FIXED value:属性值是固定的
schema约束
schema和dtd的区别:
- schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
- 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
- dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
- schema 语法更加的复杂
编写Schema约束:
<?xml version="1.0" encoding="UTF-8" ?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.lxl.cn/javase" elementFormDefault="qualified" > <!--定义persons复杂元素--> <element name="persons"> <complexType> <sequence> <!--定义person复杂元素,且person最多有两个--> <element name = "person" maxOccurs="2"> <complexType> <sequence> <!--定义name和age简单元素--> <element name = "name" type = "string"></element> <element name = "age" type = "string"></element> </sequenc> <attribute name="id" type="string" use="required"></attribute> <!--表示person必须有id属性为字符串类型--> </complexType> </element> </sequence> </complexType> </element> </schema>