JAVAWEB第五天XML简介及语法

一、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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值