xml 学习

1.XML
    Extensive Markup Language 可扩展 标记语言
        标记语言 ==> 语言的构成,标记构成. 没有逻辑性.
    XML是干什么的?
        1.记录数据
        2.配置文件 三大框架 SSH  spring struts2 hibernate ===> xml做配置文件
         表达的逻辑更强.可以表达出层级的概念
    
2.如何来书写一个XML文档呢?
    *新建文件.后缀名为xml.
    *写文档声明 注意!!!!: 一定要顶着0行0列
3.标记(标签,元素) 如何书写?
    *标签构成 , 是由一对尖括号加上一个单词.<students><student> <abc>
    *标签中的单词严格区分大小写. <a><A>这是俩标签
    *标签不能以数字开头.
    *标签可以嵌套.注意:不要交叉嵌套.
    *标签必须是成对出现的.  <a>开始标签, </a> 结束标签.
    *自闭合标签,开始标签和结束标签整合在一起. <abc/>  
4.标签的属性
    *属性的出现必须是键值对.color="red"
    *属性的值必须以双引号或单引号包裹." '都可以
    *属性必须出现在开始标签中.
    *自闭合的标签也可以有属性.属性出现在单词和 / 之间.
5注释
    <!-- abc -->
6.CDATA段
    被cdata段包裹的内容 不进行xml解析.
    <![CDATA[
    
    
    ]]>
7 处理指令(了解)  例如:可以为xml加入css.
    xhtml
    
//-------------------------------------------------------------------------------------------
1 DTD干什么的?
    *约束xml文档的.例如: 可以规定 xml文档根元素一定是students , students的子元素只能有student,....
2 DTD如何引入到XML中? (要掌握的)
    *DTD分为内部定义和外部文件两种.
    内部DTD:
        <!DOCTYPE students []> ==>  <!DOCTYPE 根元素名称 [ 约束定义 ]>
    外部DTD:
        1.本地硬盘上
        <!DOCTYPE students SYSTEM "文件位置">
        2.网络上的
        <!DOCTYPE students PUBLIC "文件名称" "文件位置">

3 如何定义DTD约束(不需要掌握)
    定义元素
        <!ELEMENT 元素名称 (元素描述) >
    定义属性
        <!ATTLIST 元素名称 属性名称 属性描述 属性说明(可选,必须)>

//---------------------------------------------------------------------------------------
1 什么是Schema?
    *1,也是xml文档约束
    *2,比DTD更强大
    *3,本身是一个XML
2 如何定义Schema (了解内容)
3 如何引入一个xsd.
  *xsd的引入是在根元素中引入
  一共需要三步
    第一步: 导入命名空间  schemaLocation="命名空间名称 XSD文件位置"
    第二步: 定义引入xsd的namespace  xmlns:前缀名称="命名空间名称"
    第三步: schemaLocation如果使用需要引入. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"






   

1 XML的概述

1.1 什么是XML

XML全称为Extensible Markup Language,意思是可扩展的标记语言。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。

W3C在1998年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本!!!

 

1.2XML的应用场景

  保存关系型数据:

  <student number="1001">

<name>zhangSan</name>

<age>23</age>

<sex>male</sex>

        <teacher name=”liSi”>

          <wife id=”xxx”><name>xxx</name></wife>

        </teacher>

</student>

 

配置文件:

  <servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>cn.itcast.servlet.MyServlet</servlet-class>

</servlet>

2XML语法

来看一个XML文档

students.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<students>	
	<student number="1001">
		<name>zhangSan</name>
		<age>23</age>
		<sex>male</sex>
	</student>
	<student number="1002">
		<name>liSi</name>
		<age>32</age>
		<sex>female</sex>
	</student>
	<student number="1003">
		<name>wangWu</name>
		<age>55</age>
		<sex>male</sex>
	</student>
</students>

.1XML文档声明

l 文档声明必须为<?xml开头,以?>结束;

l 文档声明必须从文档的00列位置开始;

l 文档声明只有三个属性:

Ø versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0

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

Ø standalone:指定文档独立性。可选属性,默认值为yes,表示当前文档是独立文档。如果为no表示当前文档不是独立的文档,会依赖外部文件。

2.2 元素

元素是XML文档中最重要的组成部分:

l 普通元素的结构:开始标签、元素体、结束标签,例如:<hello>大家好</hello>

l 元素体:元素体可以是元素,也可以是文本,例如:<b><a>你好</a></b>,其中<b>元素的元素体是<a>元素,而<a>元素的元素体是文本;

l 空元素:空元素只有开始标签,而没有结束标签,例如:<c/>,当元素必须自己闭合。

3 属性

<student number="1001">
	<name>zhangSan</name>
        <age>23</age>
	<sex>male</sex>
</student>

  • l 属性是元素的一部分,它必须出现在元素的开始标签中;
  • l 属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引;
  • l 一个元素可以有0~N个属性,但一个元素中不能出现同名属性;

4 注释

  XML的注释与HTML相同,即以“<!--”开始,以“-->”结束。注释内容会被XML解析器忽略!

5 转义字符和CDATA

5.1 转义字符

XML中的转义字符与HTML一样。

因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:“<”、“>”、“’”、“””、“&”。


符号符号的引用
(十进制代码)
字符引用
(十六进制代码)
预定义实体应用
 <&#60;&#x3c;&It
>&#62;&#x3e;&gt
"&#34;&#x22;&quot
'&#39;&#x27;&apos
&&#38;&#x26;&amp

例如:<a><hello></a><a>元素内部会被解释为:<hello>


5.2    CDATA  段

当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。

CDATA段中出现的“<”、“>”、“””、“’”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。

<a><![CDATA[<a>]]></a>

CDATA段中不能包含“]]>”,即CDATA段的结束定界符。

处理指令(了解即可)

处理指令,简称PIProcessing instruction)。处理指令用来指挥解析器如何解析XML文档内容。

例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析器,应用css文件显示xml文档内容。

<?xml-stylesheet type="text/css" href="a.css"?>

处理指令以“<?”开头,以“?>”结束,这一点与xml文档声明相同。

gj1 {font-size: 200px; color: red;}
gj2 {font-size: 100px; color: green;}
gj3 {font-size: 10px;}
gj4 {font-size: 50px; color: blue;}
<?xml version="1.0" encoding="gbk"?>
<?xml-stylesheet type="text/css" href="a.css" ?>[处理指令]
<gjm>
  <gj1>中国</gj1>
  <gj2>美国</gj2>
  <gj3>日本</gj3>
  <gj4>英国</gj4>
</gjm>

7 格式良好的XML文档

格式良好的XML就是格式正确的XML文档,只有XML的格式是良好的,XML解释器才能解释它。下面是对格式良好XML文档的要求:

l 必须要有XML文档声明;

l 必须且仅能有一个根元素;

l 元素和属性的命名必须遵循XML要求:

Ø XML命名区分大小写,例如<a><A>是两个不同的元素;

Ø 名称中可以包含:字母、数字、下划线、减号,但不能以数字、减号开头;

Ø 不能以xml开头,无论是大写还是小写都不可以,例如<xml><Xml><XML>都是错误的;

Ø 不能包含空格,例如<ab cd>是错误的。

l 元素之间必须合理包含,例如:<a><b>xxx</b></a>是合理的,而<a><b>xxx</a></b>就是错误的包含。

1DTD概述

1.1 什么是DTD

DTDDocument Type Definition),文档类型定义,用来约束XML文档。或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XML文档的根元素名为<students><students>中可以有1~N<student><student>子元素为<name><age><sex><student>元素还有number属性。

DTD不是XML文档,它是XML文档的约束文件!就像法律与人一样!

展示DTD文档

<!ELEMENT students (student+)>

<!ELEMENT student (name,age,sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>


1.2DTD分类

l 内部DTD:在XML文档内部嵌入DTD,只对当前XML文档有效;

l 外部DTD:独立的DTD文件,扩展名为.dtd

Ø 本地DTDDTD文件在本地,不在网络上。自己项目,或本公司内部使用的;

Ø 公共DTDDTD文件在网络上,不在本地。都是大公司或组织发布的,共大家使用!

 

1.3 内部DTD

 

内部DTD

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!DOCTYPE students [
<!ELEMENT students (student+)>
<!ELEMENT student (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
]>
<students>
	<student>
		<name>zhangSan</name>
		<age>23</age>
		<sex>male</sex>
	</student>
</students>

l 位置:内部DTD在文档声明下面,在根元素上面;

l 语法格式:放到“<!DOCTYPE 根元素名称 [”和“]>”之间;

l 只对当前XML文档有效;

1.4SYSTEM DTD

本地DTD

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students SYSTEM "students.dtd[dtd文件路径]">
<students>
	<student>
		<name>zhangSan</name>
		<age>23</age>
		<sex>male</sex>
	</student>
</students>

students.dtd

<!ELEMENT students (student+)>
<!ELEMENT student (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>

l 位置:本地硬盘上;

l 语法格式:直接定义元素或属性即可;

l 本地所有XML文档都可以引用这个dtd文件;

1.5 公共DTD

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students PUBLIC "-//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">
<students>
	<student>
		<name>zhangSan</name>
		<age>23</age>
		<sex>male</sex>
                </student>
</students>

公共DTD是说,DTD由某个公司或权威组织发布的,供大家使用的DTD。其格式如下:

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD网址">

当然你需要知道要使用的DTD的名称和网址。如果某个机构公布了DTD,那么一定也会公布DTD的名称和网址。

2DTD语法之定义元素

2.1 定义元素语法

定义元素语法:<!ELEMENT 元素名 元素描述>

l <!ELEMENT name (#PCDATA)>,定义名为name的元素,内容为文本类型。

l <!ELEMENT student (name,age,sex)>,定义名为student元素,内容依次为nameagesex元素;

l <!ELEMENT student ANY>,定义名为student元素,内容任意;

l <!ELEMENT student EMPTY>,定义名为student元素,不能有内容,即空元素,注意空元素是可以有属性的。<student  />

 

2.2 子元素出现次数

可以使用*+?来指定子元素出现的次数

l *:可以出现0~N次;

l +:可以出现1~N次;

l ?:可以出现0~1次。

例如:<!ELEMENT student(name,age?,hobby*,grade+) >,定义student元素,第一子元素为name,必须且仅能出现一次,age是可有可无的,hobby可以出现0~N次,grade可以出现1~N次。

 

2.3 枚举类型子元素

<!ELEMENT student (name | age | sex)>,表示student子元素为nameagesex其中之一,必须仅且能选择其一。

<!ELEMENT man  (girlfriend|wife)* >

2.4 练习

l 根元素为students,可以包含1~Nstudent元素;

l student元素依次包含:nameagesex元素;

l nameagesex元素的内容类型为文本内容;

l 要求SYSTEM外部DTD

3DTD语法之定义属性

3.1 定义属性的语法

<!ATTLIST 元素名 属性名 属性类型 设置说明>

例如:<!ATTLIST student number CDATA #REQUIRED>,给student元素定义属性number,类型为文本,这个默认是必须的。

 

3.2 属性设置说明

l #REQUIRED:说明属性是必须的;

l #IMPLIED:说明属性是可选的;

l 默认值:在不给出属性值时,使用默认值。

 

3.3 属性的类型

l CDATA:文本类型;

l Enumerated:枚举类型;

l IDID类型,ID类型的属性用来标识元素的唯一性,即元素的ID属性值不能与其他元素的ID属性值相同;

l IDREFID引用类型,用来指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID

<!ELEMENT students (student+) >[定义students,可以包含1~N个student元素]
<!ELEMENT student EMPTY>[定义student元素,该元素为空元素,即不能有元素体]
<!ATTLIST student number ID #REQUIRED>[为student定义属性number,类型为ID,该属性是必须出现的。]
<!ATTLIST student name CDATA #REQUIRED>[为student定义属性name,类型为字符串,该属性是必须的。]
<!ATTLIST student sex (male | female) "male" >[为student定义属性sex,类型为枚举,可选值为male或female,默认值为male]
<!ATTLIST student friend IDREF #IMPLIED>[为student定义属性friend,类型为IDREF,该属性是可选的。] 
<?xml version="1.0" ?>
<!DOCTYPE students SYSTEM "students.dtd">

<students>
    <student number="itcast_001" name="zhangSan"/>
    <student number="itcast_002" name="liSi" sex="male"/>
    <student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
</students> 
4DTD语法之定义实体(了解)

4.1 什么是实体

有时在XML中会出现很多相同的内容,例如“北京传智播客教育科技有限公司”,这个名称太长了,我们希望把这个值与一个“符号”绑定,然后在需要这个名称时使用它绑定的“符号”即可。这个符号就是实体了。例如:“&传智;”!

其中“传智”是实体名,而“北京传智播客教育科技有限公司”是实体值,XML被解析时,所有实体会被替换成实体名。

 

4.2 实体分类(了解)

实体分为两种:一般实体和参数实体。

l 一般实体:在XML文档中使用;

l 参数实体:在DTD使用。

 

4.3 一般实体(了解)

 

l 定义一般实体:<!ENTITY 实体名 “实体值”>,例如:<!ENTITY 大美女 “白冰”>

l 一般实体引用:&实体名;,例如<xxx>&大美女;</xxx>

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students SYSTEM "a.dtd">

<students>
	<student number="itcast_001" name="zhangSan"/>
	<student number="itcast_002" name="liSi" sex="male"/>
	<student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
	<student number="itcast_004" name="&itcast;"[引用一般实体]/>
</students>

4.4 参数实体(了解)

l 定义参数实体:<!ENTITY % 实体名 "实体值">,“%”与实体名之间的空格是必须的;

Ø 例如:<!ENTITY % friend "student friend IDREF #IMPLIED">

l 参数实体引用:%实体名;

Ø 例如:<!ATTLIST %friend;>

 

参数实体是在DTD内部使用,而不是在XML中使用。

在内部DTD中使用参数实体会有诸多限制。

 

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students SYSTEM "a.dtd">

<students>
	<student number="itcast_001" name="zhangSan"/>
	<student number="itcast_002" name="liSi" sex="male"/>
	<student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
	<student number="itcast_004" name="&itcast;"/>
</students>
<!ELEMENT students (student+) >
<!ELEMENT student EMPTY>
<!ATTLIST student number ID #REQUIRED>
<!ATTLIST student name CDATA #REQUIRED>
<!ATTLIST student sex (male | female) "male">
<!ENTITY % friend "<!ATTLIST student friend IDREF #IMPLIED>">[定义参数实体]
%friend;[参数实体引用]
<!ENTITY itcast "北京传智播客教育科技有限公司">















xml 文件与dtd文件的约束效果

格式
<!ELEMENT MYFILE ((TITLE*, AUTHOR?,EMAIL)*|COMMENT)>
+ :一次或多次(书+)
? :0次或一次(书?)
* :0次或多次(书*)
<!ELEMENT 书(书名,作者,售价+)>

一般开发框架使用

例题:

xml文件.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<书>
		<书名>java培训</书名>
		<作者>王老师</作者>
		<售价>68.0元</售价>
	</书>
	<书>
		<书名>java Wab</书名>
		<作者>张老师</作者>
		<售价>100.0元</售价>
	</书>
</书架>

book.dtd文件

<!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者,售价+)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
当引用文件是本地时候
如下方式引用
<!DOCTYPE 文档根节点 SYSTEM "dtd文件的URl">
例如:<!DOCTYPE 书架 SYSTEM "book.dtd">
当引用文件是一个公共文件时
如下方式引用
<!DOCTYPE 文档根节点 PUBLIC“DTD文件” "dtd文件的URl">

例如:


设置说明:
#PEQUIRED: 必须设置该属性
#IMPLIED: 可以设置也可以不设置
#FIXED 该属性的取值为一个值  xml 文件中不能设置其他值
直接使用默认值
例如:
<!ATTLIST 元素作者
姓名 CDTA #IMPLIED
年龄 CDTA #IMPLIED
联系信息 CDTA #PEQUIRED:
网站职务 CDTA #FIXED “页面作者”
个人爱好 CDATA "上网"
>

细节:

元素定义

<!ELEMENT 元素名称 元素类型>
<!ELEMENT 书架(书+)>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值