XML文件构成(语法,约束,文档解析)

目录

一、XML语法

1、XML文档说明

2、元素

3、属性

4、注释

5、转义字符

6、CDATA区

7、示例XML文件

二、XML文档约束:DTD和Schema

1、DTD约束

(1)内部DTD

(2)外部DTD-本地(SYSTEM)

(3)外部DTD-本地(PUBLIC)

DTD文档详细解读

(1)元素声明

基本语法

(2)属性声明

2、Schema约束

三、XML文档的解析(重点)

Dom解析原理及结构模型

API的使用


     XML全称是Extensible Markup Language,意思是可扩展的标记语言,XML的标签是可以由用户自定义的。但是为了限定XML的内容,需要使用xml约束(DTD或Schema),为了获取xml的内容,我们需要用dom4j(常用)进行解析。

一、XML语法

1、XML文档说明

<?xml version="1.0" encoding="utf-8"?>
<!--这里的version是必须有的,后面的encoding是可有可无的,但是必须是小写-->

1.文档的声明必须以<?xml开头 ,以?>结束;

2.文档声明必须是从文档的0行0列的位置开始;

3.文档声明的只有三个属性:

a).区分大小写

b).version:指明XML的版本,必须是属性,因为我们是不会选择1.1,只会选择1.0

c).encoding:指定当前文档的编码。可选择属性,默认值是utf-8

2、元素

元素是XML文件的基本构成单位,可以包含文本、属性和其他元素。元素通过开始标签和结束标签来定义。

<element>Content</element>

元素可以嵌套:

<parent>
    <child>Child content</child>
</parent>

元素的命名:

1、区分大小写

2、不能使用空格,冒号

3、不建议使用XML、xml、Xml开头

每个XML文件必须有且仅有一个根元素,所有其他元素都必须包含在这个根元素内。

3、属性

4、注释

5、转义字符

6、CDATA区

CDATA区块用于包含不需要解析的文本数据,特别是包含特殊字符的文本。

<element><![CDATA[Some unparsed text]]></element>

7、示例XML文件

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading reminder="true">Reminder</heading>
    <body><![CDATA[Don't forget me this weekend!]]></body>
    <!-- This is a comment -->
</note>

二、XML文档约束:DTD和Schema

1、DTD约束

DTD(Document Type Definition),文档类型自定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素属性等。

(1)内部DTD

  • 在XML文档内部直接定义DTD。
<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to, from, heading, body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
]>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

 note表示根节点

(2)外部DTD-本地(SYSTEM)

  • 将DTD定义在外部文件,并在XML文档中引用。
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

外部DTD文件(note.dtd)内容:

<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

(3)外部DTD-本地(PUBLIC)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper>

</mapper>

DTD文档详细解读

(1)元素声明

  • 基本语法
<!ELEMENT 元素名 元素描述>

         元素名:自定义名字

         元素描述:元素的内容声明,可以是子元素、字符数据或空元素。

                           常见的符号:?   *  +  ( )    |   ,

                           常见的类型:EMPTY   ANY   #PCDATA

符号符号类型描述示例
问号零次或一次,表示子元素可以出现零次或一次<!ELEMENT option (value?)>
*星号零次或多次,表示子元素可以出现零次或多次<!ELEMENT list (item*)>
+加号一次或多次,表示子元素必须出现一次或多次<!ELEMENT list (item+)>
()括号用来给元素分组
|竖条表明在列出的对象中选择一个<!ELEMENT person ( a | b )>
,逗号顺序关系,表示子元素必须按指定顺序出现<!ELEMENT person (name, age)>
`tab上面的键选择关系,表示子元素可以是多种类型中的一种<!ELEMENT br EMPTY>
EMPTY空元素,表示元素不包含内容<!ELEMENT br EMPTY>
ANY任意内容,表示元素可以包含任意内容<!ELEMENT anything ANY>
(#PCDATA)已解析的字符数据,表示元素只能包含字符数据<!ELEMENT text (#PCDATA)>

这里以mybatis的xml文件为例:

   dtd约束:

1、mapper标签中可以有cache-red   cache    resultMap等多个子标签,子标签可以有的数量看符号代表的意思

2、cache-ref  是 EMPTY,表示没有子标签,只能是自己

3、cache 表示可以有0个或者多个property子标签

(2)属性声明

<!ATTLIST 元素名
属性名 属性类型 约束
属性名 属性类型 约束
....
...
>

元素名:就是在前面定义元素的时候声明的元素名字

属性名:自定义属性名

属性类型:(这里是常用的三个)

类型名描述示例
CDATA文本类型<!ATTLIST note date CDATA #IMPLIED>
ID唯一标识符,属性值必须在文档中是唯一<!ATTLIST person id ID #REQUIRED>
枚举属性值可以是枚举值中的一个<!ATTLIST person gender (male | female) #IMPLIED>

约束

约束名字描述示例
#REQUIRED表示属性是必需的,元素必须包含此属性<!ATTLIST person id ID #REQUIRED>
#IMPLIED表示属性是可选的,可以包含也可以不包含<!ATTLIST note date CDATA #IMPLIED>
#FIXED "value"属性必须具有固定值<!ATTLIST employee type CDATA #FIXED "permanent">
 
默认值如果属性没有提供值,则使用默认值<!ATTLIST person nationality CDATA "unknown">

2、Schema约束

1.Schema是新的XML文档约束

2.Schema是要比DTD强大很多,是DTD的替代者

3.Schema本身也是XML文档,但Schema文档的扩展名是xsd,而不是xml

4.Schema功能更强大,数据类型更完善

5.Schema支持名称空间

案例实现

三、XML文档的解析(重点)

Dom解析原理及结构模型

API的使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值