XML和反射技术
XML技术
什么是XML,作用是什么
可扩展标记语言(Extensible Markup Language ),XML是一种数据格式,类似 HTML,是使用标签进行内容描述的技术,与HTML不 同的是,XML的标签和属性 都是根据业务需求自定义的。
XML在企业开发中主要有两种应用场景:
XML可以作为数据交换的载体,也就是说使用XML格式进行数据的传输
目前有一门数据交换的语言慢慢替代xml —- jsonXML可以作为配置文件的载体,例如后续我们学习的servlet、struts2、hibernate 的配置都是通过XML进行配置的(常使用的)
如何去写一个XML(重点)
- XML的编写要比HTML简单,根据实际的业务场景自行编写有意义的标签和属性, 例如创建一个以.xml为后缀名的文件,编写描述一个网上商城的商品信息的xml
|
|
- xml编写时也要符合一定的规则:
- xml文件的后缀名是.xml
- xml有且只有一个根标签
- xml的标签是尖括号包裹关键字成对出现的,有开始标签有结束标签,关键字是自 定义的,xml也可以有空标签/自关闭标签
- xml允许有属性,属性也是根据需要自定义的,属性格式:属性=“属性值”,多 个属性之间使用空格隔开
- xml是区分大小写的 —– html不区分大小写
- xml的组成:
- 文档声明:<?xml version=”1.0” encoding=”UTF-8”?>
- 根标签,例如:
- 其他标签,例如:
- 属性,例如:category=”电脑办公”
- 文本,例如:三星笔记本
- 注释,例如:
- CDATA区:
CDATA区可以保证数据的原文输出
例如:<![CDATA[原文显示的内容]]>
如何去约束一个XML(了解)
提到约束一个XML,必须要理解为什么对XML要进行约束?
因为XML的标签都是自定义的,xml在作为框架配置时不能很好的规范开发者书写, 所以要使用约束告知开发者怎样去配置一个xml
- XML的约束有两种:
- DTD约束
- Schema约束
DTD约束
- 例如:我们要约束上述编写的store.xml,相应 的DTD约束如下
|
|
- dtd的语法摘要:
- 使用ELEMENT描述元素
- 括号() 代表标签体的内容
- 子标签—标签名称 子标签有多少个?
- 通过符号描述:
|
|
- 子标签的顺序:
- 使用逗号,
- 或 | 任意选择一个
- 文本—-
#PCDATA
- 使用ATTLIST描述某个元素身上的属性
属于哪个标签 属性名称 属性的类型 该属性的是否必须- 该属性的是否必须:
+ `#REQUIRED` 代表概述户型必须 + `#IMPLIED` 代表属性随意 写也行不写也行
- 该属性的是否必须:
引入约束
在xml中引入本地的DTD文件:
<!DOCTYPE store SYSTEM "store.dtd">
- 其中:
SYSTEM
代表本地dtd文件
- 其中:
在xml中引入互联网上的DTD文件:
<!DOCTYPE store PUBLIC "//UNKNOWN/" "unknown.dtd">
其中:PUBLIC代表互联网上的DTD+ //UNKNOWN/:此位置代表为引入的DTD取一个名称,随意取 + unknown.dtd:此位置代表引入的DTD的路径,一般是互联网路径
Schema约束
例如:我们要约束上述编写的store.xml
,相应 的Schema约束如下
- Schema中分为简单元素和复杂元素
- 简单元素:标签仅仅包含文本标签体的元素
- 复杂元素:标签包括子标签或属性的元素
Schema约束是怎样引入到XML中的?
例如:
web工程的核心配置文件web.xml
spring的核心配置文件applicationContext.xml
如何去解析一个XML(了解)
XML的解析就是将有用的信息从XML文档中解析出来,例如上述的store.xml,怎 样通过API将store.xml中的属性值和文本解析出来。
- 常用的解析方式
- DOM解析:将文档整体加载到内存形成一个DOM树在解析,支持文档的增删改查 和文档的回写。
- SAX解析:读取一行解析一行,只支持文档的查询,也不支持文档的回写。
- PULL解析:类似SAX解析,Android的常用解析技术。
常用的解析技术
- JAXP:SUN公司的官方解析技术,支持DOM解析和SAX解析
- JSOUP:一种解析HTML的特定解析的开发包
- JDOM:开源组织的DOM方式的解析技术
- DOM4J:JDOM的分离版,开源,Hibernate底层的XML解析技术
DOM4J解析技术
- DOM4J是第三方开源的解析技术,首先要下载dom4j.jar
- 将其中的jar包导入工程
解析XML的步骤:
在dom4j的lib目录下有一个jaxen-1.1-beta-6.jar,导入这个jar包可以进行XPath的解析。
XML的实际应用场景(理解)
实际开发中,我们一般会使用各种各样的框架的进行企业开发,而这些框架一般都会 将某些公共的功能写好了,我们需要做的只需要按照框架提供的约束进行框架的配置 就可以了,当我们使用XML配置好框架后,在运行时,框架底层会解析我们配置XML 文档获取有用的信息,从而根据我们的需求实现某些功能。
所以,实际开发中我们很少会自己编写XML约束和解析XML