xml

XML和反射技术

XML技术

什么是XML,作用是什么

可扩展标记语言(Extensible Markup Language ),XML是一种数据格式,类似 HTML,是使用标签进行内容描述的技术,与HTML不 同的是,XML的标签和属性 都是根据业务需求自定义的。

  • XML在企业开发中主要有两种应用场景:

    • XML可以作为数据交换的载体,也就是说使用XML格式进行数据的传输
      目前有一门数据交换的语言慢慢替代xml —- json

    • XML可以作为配置文件的载体,例如后续我们学习的servlet、struts2、hibernate 的配置都是通过XML进行配置的(常使用的)

如何去写一个XML(重点)

  • XML的编写要比HTML简单,根据实际的业务场景自行编写有意义的标签和属性, 例如创建一个以.xml为后缀名的文件,编写描述一个网上商城的商品信息的xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<store>
<product category="手机数码">
<pid>100</pid>
<pname>华为手机</pname>
<price>3000</price>
</product>
<product category="电脑办公">
<pid>200</pid>
<pname>三星笔记本</pname>
<price>5000</price>
</product>
<product category="大型家电">
<pid>300</pid>
<pname>海尔洗衣机</pname>
<price>4000</price>
</product>
</store>
  • xml编写时也要符合一定的规则:
    1. xml文件的后缀名是.xml
    2. xml有且只有一个根标签
    3. xml的标签是尖括号包裹关键字成对出现的,有开始标签有结束标签,关键字是自 定义的,xml也可以有空标签/自关闭标签
    4. xml允许有属性,属性也是根据需要自定义的,属性格式:属性=“属性值”,多 个属性之间使用空格隔开
    5. xml是区分大小写的 —– html不区分大小写
  • xml的组成:
    1. 文档声明:<?xml version=”1.0” encoding=”UTF-8”?>
    2. 根标签,例如:
    3. 其他标签,例如:
    4. 属性,例如:category=”电脑办公”
    5. 文本,例如:三星笔记本
    6. 注释,例如:
    7. CDATA区:
      CDATA区可以保证数据的原文输出
      例如:<![CDATA[原文显示的内容]]>

如何去约束一个XML(了解)

提到约束一个XML,必须要理解为什么对XML要进行约束?

因为XML的标签都是自定义的,xml在作为框架配置时不能很好的规范开发者书写, 所以要使用约束告知开发者怎样去配置一个xml

  • XML的约束有两种:
    • DTD约束
    • Schema约束

DTD约束

  1. 例如:我们要约束上述编写的store.xml,相应 的DTD约束如下
1
2
3
4
5
6
<!ELEMENT store (product+)>
<!ELEMENT product (pid,pname,price)>
<!ELEMENT pid (#PCDATA)>
<!ELEMENT pname (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST product category CDATA #REQUIRED>
  1. dtd的语法摘要:
    • 使用ELEMENT描述元素
    • 括号() 代表标签体的内容
    • 子标签—标签名称 子标签有多少个?
    • 通过符号描述:
1
2
3
+:代表一个或多个 至少有一个
*:代表0个或的多个 有没有都行
?:代表0个或一个
  • 子标签的顺序:
    • 使用逗号,
    • 或 | 任意选择一个
    • 文本—-#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中的属性值和文本解析出来。

  1. 常用的解析方式
    • DOM解析:将文档整体加载到内存形成一个DOM树在解析,支持文档的增删改查 和文档的回写。
    • SAX解析:读取一行解析一行,只支持文档的查询,也不支持文档的回写。
    • PULL解析:类似SAX解析,Android的常用解析技术。
  2. 常用的解析技术

    • JAXP:SUN公司的官方解析技术,支持DOM解析和SAX解析
    • JSOUP:一种解析HTML的特定解析的开发包
    • JDOM:开源组织的DOM方式的解析技术
    • DOM4J:JDOM的分离版,开源,Hibernate底层的XML解析技术
  3. DOM4J解析技术

    • DOM4J是第三方开源的解析技术,首先要下载dom4j.jar
    • 将其中的jar包导入工程

解析XML的步骤:

在dom4j的lib目录下有一个jaxen-1.1-beta-6.jar,导入这个jar包可以进行XPath的解析。

XML的实际应用场景(理解)

实际开发中,我们一般会使用各种各样的框架的进行企业开发,而这些框架一般都会 将某些公共的功能写好了,我们需要做的只需要按照框架提供的约束进行框架的配置 就可以了,当我们使用XML配置好框架后,在运行时,框架底层会解析我们配置XML 文档获取有用的信息,从而根据我们的需求实现某些功能。

所以,实际开发中我们很少会自己编写XML约束和解析XML

张冲 wechat
欢迎扫一扫上面的微信关注我,一起交流!
坚持原创技术分享,您的支持将鼓励我继续创,点击打赏!