JAVAWEB第五天XML简介及语法

来源:互联网 发布:道路测量员软件说明书 编辑:程序博客网 时间:2024/05/19 03:28

一、XML简介
1.eXtensible Makeup Language:可扩展标记性语言
XML和HTML一样都是标记性语言,使用标签来进行操作,但HTML里面的标签是固定的,XML的可扩展则是体现在可以自定义。
2.用途
HTML用于显示数据,XML也可以显示数据,但不是其主要功能,主要功能是存储数据。
有两个版本,1.0和1.1,但是我们用的是1.0。
3.XML的应用
不同的系统之间传输数据
用来表示生活中有关系的数据
经常用在配置文件
二、XML的语法
1.XML的文档声明
—创建一个文件,后缀名为.xml
—如果写XML,第一步,必须要有一个文档声明(证明这是一个XML文件)

<?xml version="1.0" encoding="gbk"?>

—文档声明必须是第一行第一列,前面不能有空格
—XML的编码有gbk和utf-8和iso8859-1(不包含中文)
—对于乱码,在保存时文件默认的格式和文档中定义的相同
2.定义元素(标签)
—标签定义有开始必须要有结束:<person></person>
—如果标签内没有内容,可以在标签内结束:<aa/>
—标签可以嵌套,但是必须合理嵌套
—一个xml中只能有一个根标签,其他的标签都嵌套在这里面
—在XML中会把空格和换行当初代码来解析,下面两个代码是不同的

<person>我是一个人</person><person>    我是一个人</person>

—XML标签的命名规则:(1)、区分大小写 (2)不能以数字或者下划线开头 (3)不能以xml、XML等各种形式的开头 (4)标签 内不能包含空格和冒号
3.定义属性
—xml是标记性文档,也会有属性
—一个标签内可以有多个属性,但是属性的名字不能相同,即不能全部都写成

<person id="aa", id1="bb">我是一个人</person>不能写为<person id="aa", id="bb">我是一个人</person>

—属性与属性值之间使用=,属性值必须要用引号括起来(单引号双引号均可)
—属性的命名规范和标签的相同

4.注释

<!-- xml的注释内容 -->

—注释不能嵌套,快捷键是ctrl+shift+/

5.特殊字符
—如果要将特殊字符直接写到xml中,需要用转义字符

<panduan>a>b</panduan>这样写是错误的<panduan>a&gt;b</panduan>

—常用转义字符有<:&lt; >:&gt; &:&amp; ":&quot; ':&qpos;

6.CDATA区
如果有很多的内容含有特殊字符,可以将其放到一个CDATA区中,这样就可以不必使用转义字符进行转义

写法:<![CDATA[内容]]>
<![CDATA[<b>if((a>b)&&(b>c)&&(c<d))</b>]]>

7.PI指令
—是处理指令,可以在xml中设置样式,但是基本不用,因为xml的功能不是主要用于显示数据的

<?xml-stylesheet type="text/css" href="css路径"?>

三、xml的约束
1.为什么要定义约束?
比如定义了一个person的xml文件,想要里面仅仅放入人的属性,但是如果在里面写一个猫的属性,系统并不会报错,因为符合语法规范,所以此时需要设置约束。
xml的约束技术有:dtd约束和schema约束
2.dtd快速入门
一个xml文件代码如下:

<?xml version="1.0" encoding="gbk"?><person>    <name>liqing</name>    <age>21</age></person>

—创建一个文件名,后缀为.dtd
步骤:(1)看xml文件中有多少元素,有几个元素,就在dtd文件中写几个<!ELEMENT>,对于上述来说是3个
(2)判断元素是复杂元素还是简单元素
—复杂元素:有子元素的元素

 <!ElEMENT 元素名称(子元素)> <!ELEMENT person(name,age)>

—简单元素:没有子元素的元素

<!ElEMENT 元素名称 (#PCDATA)><!ELEMENT name (#PCDATA)>注意:空格。<!ELEMENT age (#PCDATA)>name和age之后都有一个空格

(3)在xml中引入dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">注意空格和大小写<!DOCTYPE person SYSTEM "1.dtd">

3.dtd的引入方式
(1)引入外部的dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">

(2)使用内部的dtd文件

<!DOCTYPE person(根元素名称)[ <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)>]>

(3)使用外部的dtd文件,使用网络上的一些dtd文件

<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD文档的URL">

—后面学到的框架会使用到
四、使用dtd定义元素
语法:

<!ELEMENT name (#PCDATA)><name>liqing</name>(#PCDATA):表示name是字符串类型
<!ELEMENT sex EMPTY><sex></sex>EMPTY:表示元素为空(没有内容)
<!ELEMENT school ANY>ANY:可以为任意,可以空,也可以不为空

2.复杂元素的约束

<!ElEMENT 元素名称(子元素)> <!ELEMENT person(name,age,sex,school)> ---这样写表示每个元素只能出现一次

如果出现多次,则需要使用以下符号(英文状态下)

+:一次或者多次?:0次或者一次*:任意次,0次或者多次
<!ELEMENT person (name+,age,sex,school)><person>    <name>liqing</name>    <name>li</name>    <name>qingqing</name>    <age>21</age>    <sex></sex>    <school>school</school></person>

子元素之间使用的符号意义

,(逗号):表示必须按照写的顺序来<name>liqing</name><age>21</age><sex></sex><school>school</school>|(竖线):表示只能出现其中的任意一个子元素<age>21</age>

五、使用dtd定义属性
语法:

<!ATTLIST 元素名称      属性名称 属性类型 属性的约束>注意:属性名称和属性类型以及属性的约束之间必须要有空格

属性的类型有三种:
(1)CDATA:表示字符串

<!ELEMENT birthday (#PCDATA)><!ATTLIST birthday    ID1 CDATA #REQUIRED><birthday ID1="AAA">2015</birthday>

(2)枚举:表示只能在指定范围内出现值,但是只能每次出现一个

<!ELEMENT age (#PCDATA)><!ATTLIST age    ID2 (AA|BB|CC) #REQUIRED><age ID2="AA">21</age>

(3) ID:值只能以字母或者下划线开头,值得是属性的值

 <!ELEMENT name (#PCDATA)> <!ATTLIST name    ID3 ID #REQUIRED > <name ID3="A1">liqing</name>

属性约束:
(1)#REQUIRED:属性必须要存在,不写会报错
(2)#IMPLIED:属性可有可无
(3)#FIXED:表示一个固定值,如果设置属性的值,必须是你dtd里面设置的

 <!ELEMENT sex EMPTY> <!ATTLIST sex     ID4 CDATA #FIXED "AAA" > <sex ID4="AAA"></sex>

(4)直接值:如果在dtd里面设置了,但是在xml中没有设置,则xml中会默认使用dtd中设置的,如果xml中另设置值,则使用xml中设置的

 <!ELEMENT school ANY> <!ATTLIST school     ID5 CDATA "VVV" > <school>school</school> 或者按照下面的 <school ID5="TTT">school</school>

六、实体的定义
定义实体时需要写在内部dtd中,如果写在外部dtd中,在某些浏览器下可能不会实现
语法:

<!ENTITY 实体名称 实体的值>使用实体:&实体名称;
<!ENTITY TEST "LIQING"><name ID3="A1">&TEST;</name>在浏览器显示时会显示<name ID3="A1">LIQING</name>

七、以上全部代码

<?xml version="1.0" encoding="UTF-8"?><!-- <!DOCTYPE person SYSTEM "1.dtd"> --><!DOCTYPE person[ <!ELEMENT person (name+,age?,sex*,school,birthday)> <!ELEMENT name (#PCDATA)> <!ATTLIST name    ID3 ID #REQUIRED > <!ELEMENT age (#PCDATA)> <!ATTLIST age    ID2 (AA|BB|CC) #REQUIRED > <!ELEMENT sex EMPTY> <!ATTLIST sex     ID4 CDATA #FIXED "AAA" > <!ELEMENT school ANY> <!ATTLIST school     ID5 CDATA "VVV" > <!ELEMENT birthday (#PCDATA)> <!ATTLIST birthday    ID1 CDATA #REQUIRED > <!ENTITY TEST "LIQING">]><person>    <name ID3="A1">&TEST;</name>    <age ID2="AA">21</age>    <sex ID4="AAA"></sex>    <school>school</school>    <birthday ID1="AAA">2015</birthday></person>

八、案例
TV.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE TVSCHEDULE SYSTEM "TV.dtd"><TVSCHEDULE NAME="CCTV">   <CHANNEL CHAN="CCC">     <BANNER>AAA</BANNER>     <DAY>        <DATE>2015-11-11</DATE>        <HOLIDAY>SSSS</HOLIDAY>     </DAY>     <DAY>        <DATE>2015-12-12</DATE>        <PROGRAMSLOT VTR="SSS">           <TIME>1990</TIME>           <TITLE>TEST</TITLE>        </PROGRAMSLOT>     </DAY>   </CHANNEL></TVSCHEDULE>

TV.dtd

<!ELEMENT TVSCHEDULE (CHANNEL+)><!ELEMENT CHANNEL (BANNER,DAY+)><!ELEMENT BANNER (#PCDATA)><!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)><!ELEMENT HOLIDAY (#PCDATA)><!ELEMENT DATE (#PCDATA)><!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)><!ELEMENT TIME (#PCDATA)><!ELEMENT TITLE (#PCDATA)> <!ELEMENT DESCRIPTION (#PCDATA)><!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED><!ATTLIST CHANNEL CHAN CDATA #REQUIRED><!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED><!ATTLIST TITLE RATING CDATA #IMPLIED><!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
原创粉丝点击