XML.docx
- 文档编号:10447493
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:20
- 大小:22.55KB
XML.docx
《XML.docx》由会员分享,可在线阅读,更多相关《XML.docx(20页珍藏版)》请在冰豆网上搜索。
XML
一、XML的背景
XML第一天
2007年5月25日
1)XML代表扩展的标记语言(eXtensibleMarkupLanguage);
2)XML由W3C联盟发展维护;
3)XML是一种元语言,可以用来定义其它标签语言;
4)XML没有定义任何标记,它提供了一种工具定义标记以及它们之间的结构关系;
5)XML是一种用于结构化文本交换的标记语言;
6)XML代表了内容的结构也代表了内容本身;
7)XML继承自SGML(标准标记语言)。
SGML的前身GML由IBM在1960年发明,用于
描述设备无关的文本
8)XML是SGML的子语言,由SGML简化而来,起初的目的是为Web的结构文档提供服
务。
9)W3C组织在1998年2月10日发布XML1.0版,第二个版本发布于2000年10月9日。
10)XML是分层的树形结构的自解释的一种可扩展的标记语言。
<姓名>liucy姓名>
|
|
|
开始标记|结束标记
描述的数据
在标记语言中,标记是可以嵌套的
XML和HTML的关系
1)事实上,HTML和XML不能够进行比较的。
因为XML是一种元语言,而HTML是一
种定义好的标记语言。
XML是描述数据的语言,HTML是描是数据外观的语言。
2)HTML有一套确定的标记。
在W3C标准规范中定义了HTML标记的含义并由部分浏览
器实现了。
3)HTML标记非常适合描述人类易读的可视化文本。
4)HTML定义了许多表现指令用以优化在浏览器中的显示。
5)在HTML标记中,数据固有的结构丢失了。
6)HTML没有维持数据类型信息的完整性、约束、或实体间的其它关系,而XML提供了
这些特征。
xmlverson="1.0"encoding="GBK"?
>--声明这是一个xml文件,默认编码方式UTF-8
对XML文件的要求,格式良好(符合XML的语法要求),有效的XML;
XML的用途,数据传输的中间件,做为通用文档格式
1,数据交换
2,web服务
3,内容管理
4,web集成
5,充当配置文件
格式良好的XML文件的规范
XML文档是一种严格规范的语言,必须按照规范来写。
XML文档的框架结构
XML文档=序言+元素+杂项(可选)
1)序言
序言=(XML声明)+(杂项)+(文档类型声明)
XML声明
xml版本信息(编码信息)(文档独立性信息)?
>
如:
xmlversion="1.0"encoding="gb2312"standalone="yes"?
>
文档类型声明:
规定元素的结构和属性列表的取值
如:
DOCTYPEstudinfoSYSTEM"studinfo.dtd">
2)元素
空元素<空元素标签名属性="属性值"/>
非空元素<起始标签>内容<结束标签>
内容=(子元素|字符数据|字符数据段|引用|处理指令|注释)*
字符数据
字符数据中,不能含有&,<,>,',",需要采用实体引用的方式
3)杂项
字符数据段
[CDATA[字符数据]]>
引用
ENTITY引用名".......">
处理指令XML为其它应用程序准备的接口。
处理指令?
>
注释
--注释内容-->
空白符指空格、回车等
XML文件事例
xmlverson="1.0"?
>
--这一句一定要求写在文件的第一行-->
--只能有一个根元素即那一对根标签-->
--根标签--> --根元素的内容--> --子元素--> ...
XML文件的写法
xml文档是有标签和标签中的内容组成的,标签和标签中的内容合成为元素
标签名可以由字母、数字、"_"、".",只可以以字母,下划线开头
非空元素
aaa(内容)
(结束标签)
空元素
格式良好的XML文档的规范
1)文档声明位于文件的开头
xmlverson="1.0"?
>
2)文档中只能定义一个唯一的根元素(根元素是在文档声明之后的最外层的元素)
3)标签必须闭合,且不能交叉,有元素的起始标签,就必须有其结束标签(空元素除外)
4)层层嵌套,每一对标签总是出于另一对标签的内或和其处于同一层,不能交叉(根元素
chuw)
5)大小写敏感,起始标签和结束标签的名字要一致
6)属性值必须用引号引起来
7)注意特殊字符,使用时需要使用转义字符。
注意:
1.第一行一定要写
xmlverson="1.0"?
>
2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标
签和标签的内容加在一起叫作一个元素。
xml是大小写敏感的,只能以字母或下划线开头。
字符转义
<代表"<",
>代表">",
"代表双引号,
&代表"&",
'代表单引号
字符数据段,不解析
[CDATA[........]]>
最内层[]中的部分不必使用转义,其中内容会直接输出。
练习:
写一个xml文件,内容是自己的简历
要求:
必须要写明年龄,英语水平
&2.DTD(结构定义)
DTD文档是用于规定XML文档的结构。
只有结构符合所引用的DTD文件的XML文件才
能称之为有效的XML文件。
DTD(文档类型定义)
!
DOCTYPE定义DTD文件名
!
ELEMENT定义元素中可用的数据类型
#PCDATA可解析字符串。
1)DTD的调用
方式一:
调用内部文档类型定义。
xmlversion="1.0"standalone="yes"?
>
DOCTYPEstudinfo[
ELEMENTstudinfo(#PCDATA)>]>
注意点:
(1)studinfo与(#PCDATA)有空格
(2)文档类型名与根元素名必须一致
方式二:
调用外部文档类型定义,需要写一个DTD文档
xmlversion="1.0"standalone="no"?
>
DOCTYPEstudinfoSYSTEM"studinfo1.dtd">
注意点:
(1)standalone="no"
(2)注意dtd文件的路径
2)DTD的结构
是否有DTD文件
如果文档是一个"有效的XML文档"(见上一章),那么文档一定要有相应DTD文件,并且严
格遵守DTD文件制定的规范。
DTD文件的声明语句紧跟在XML声明语句后面,格式如下:
DOCTYPEtype-of-docSYSTEM/PUBLIC"dtd-name">
其中:
"!
DOCTYPE"是指你要定义一个DOCTYPE;
"type-of-doc"是文档类型的名称,由你自己定义,通常于DTD文件名相同;
"SYSTEM/PUBLIC"这两个参数只用其一。
SYSTEM是指文档使用的私有DTD文件的网址,
而PUBLIC则指文档调用一个公用的DTD文件的网址。
PUBLIC后面跟正式公用标识符和dtd的URL
"dtd-name"就是DTD文件的网址和名称。
所有DTD文件的后缀名为".dtd"。
我们还是用上面的例子,应该写成这样:
xmlversion="1.0"standalone="no"encode="UTF-8"?
>
DOCTYPEfilelistSYSTEM"filelist.dtd">
dtd文件中
定义语法:
ELEMENTRoot(#PCDATA)>根标记,只能是文本,并且不能有子标记
ELEMENTRoot(A)>Root标记下有一个A的子标记,不能有文本内容
ELEMENTRoot(A+)>Root标记下有一个或多个A的子标记,没有这个子标记不行,不
能有文本内容
ELEMENTRoot(A*)>Root标记下有0~n个A的子标记,不能有文本内容
ELEMENTRoot(A?
)>Root标记下有一个或零个A的子标记,不能有文本内容
ELEMENTRoot(A,B)>Root标记下有一个A的子标记和一个B字标记,要先有A,后
有B
ELEMENTRoot(A|B)>Root标记下有一个A的子标记或者一个B字标记
ELEMENTRoot>Root标记必须是空的,换行也不行
定义属性的约束
ATTLISTelementName
attributeNameattributeTypeattributeDefault>
ATTLISTA
p1CDATA
p2{a|b|c}
p3ID
>
属性名
CDATA属性是文本内容
{enumerated}写一个枚举,把枚举值列出来
NMTOKEN文本内容中的自负取值与标记命名规则一样,内容只能是字母,数字,下划线,
连字符
NMTOKENS复数情况,用空格分隔
ID是属性的类型,属性值必须唯一
IDREF表示属性的取值必须是文档范围中已经存在的ID属性的值,必须引用某个ID属性
的值
IDREFS复数情况,用空格分隔
属性默认形式
#REQUIRED该属性必须有,但是没有默认值
#IMPLIED属性可有可没有,也没有默认值
attribute-value用“”引起来
#FIXED用#FIXED“”形式,并且是固定值,属性的值必须是引号中的内容
实体声明
实体:
存储了任意符合规则的xml文档单元片断。
1、内部通用实体
定义格式
ENTITY实体名“实体内容”>
引用格式&实体名;
2、外部通用实体
定义格式
ENTITY实体名SYSTEM“外部实体的URI”>
引用格式&实体名;
事例:
xmlversion="1.0"standalone="no"?
>
DOCTYPEstudinfo[
ELEMENTstudinfo(name,age,address,school)>
ELEMENTname(#PCDATA)>
ELEMENTage(#PCDATA)>
ELEMENTaddress(#PCDATA)>
ELEMENTschool(#PCDATA)>
ENTITYschoolinfoSYSTEM"schoolinfo.txt">
]>
XML第二天
一、NameSpace(命名空间)
2007年5月28日
namespace是为了解决XML文档中的命名冲突问题的。
DTD不支持命名空间,解析器无法测试命名空间。
1、作用:
解决XML文档中命名冲突的问题,即将
XML文档与引用URI标识的名域相结合,来
限定其中的元素和属性名。
示例:
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
--这个name和teacher根元素中的name发生命名冲突-->
--这个sex和teacher根元素中的sex发生命名冲突-->
2、名域的声明
(1)直接定义
xmlns:
名域前缀="名域的URI"(唯一性)
类比:
名字与身份证
名域的使用,名域前缀:
需要限定的元素名
示例:
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
teacherxmlns: teacher=" xmlns: student=" name>zhangshan name> sex>man sex> student> name>stu1 name> sex>girl sex> student>
teacher>
(2)缺省定义
xmlns=名域的URI
--在文档的默认名称空间中
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
xmlns: student=" name>stu1 name> sex>girl sex> 3、名域的使用 (1)用名域限定元素 xmlversion="1.0"encoding="UTF-8"standalone="yes"? > teacherxmlns: teacher=" xmlns: student=" name>zhangshan name> sex>man sex> student> name>stu1 name> sex>girl sex> student> teacher> (2)用名域限定属性 xmlversion="1.0"encoding="UTF-8"standalone="yes"? > teacherxmlns: teacher=" xmlns: student=" name>zhangshan name> sex>man sex> addressteacher: city="beijing">caoyang,no1 address> student> name>stu1 name> sex>girl sex> addressstudent: city="tianjin">haidian,no2 address> student> teacher> 4、名域的作用范围 名域能够把声明它的元素和该元素的所有子元素关联起来,除非它们被其他的名域声明所覆 盖。 局部优先 两个标志是否属于同一个命名空间是由URI决定的,跟前缀没有关系 若定义了一个无前缀的命名空间,那么那些无前缀的标签就属于这个命名空间了 二、XML文档的解析 DOM(文档对象模型)DocumentObjectModle SAX(SampleAPIforXML) 都是w3c定义的标准 默认使用Apache提供的Xerces实现 采用树状分析,进行建模 1、Dom 为XML文档的已解析版本定义了一组接口。 解析器读入整个文档,然后构建一个驻留内 存的树结构,然后代码就可以使用DOM接口来操作这个树结构。 优点: 整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能; 缺点: 将整个文档调入内存(包括无用的节点),浪费时间和空间; 使用场合: 一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU) DOM解析是将整个的XML文档元素结构读入内存,由根元素向下形成子元素分级树状关 系。 DOM的解析 DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); 方法模式 DocumentBuilderbuilder=factory.newDocumentBuilder(); Documentdocument=builder.parse(name); ---运用的工厂 以上三行代码,使用来生成Document对象的,Document对象就代表了读入内存后结构化 的XML文档。 使用Document对象的getDocumentElement()方法获得子节点,可以通过不断的迭代便利所 有节点,这些节点就代表了元素,从根元素开始一直到最内层的子元素。 getElementsByTagName(Stringtagname)这个方法可以通过元素的名来或得该元素内层元 素, 也就是或得了这个节点的所有子节点(NodeList)NodeList的方法getLength()(列表中的节 点数), 通过循环使用Nodeitem(intindex)(返回集合中的第index个项)方法,来获得每个子节 点。 String.trim();去处空格,制表符,换行标记 DOM解析的其他方法请参阅JAVAAPI文档。 (org.w3c.dom 2、SAX javax.xml.parsers) SAX: 事件机制驱动。 在遇到相应的节点时,会发出一个事件,当解析器发现元素开始、元 素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存 数据。 优点: 不用事先调入整个文档,占用资源少; SAX解析器代码比DOM解析器代码小,适于Applet,下载 缺点: 不是持久的;事件过后,若没保存数据,那么数据就丢了,比较消耗时间; 只能顺序处理,不能选择读取。 不支持文档的创建和修改。 无状态性;从事件中只能得到文本,但不知该文本属于哪个元素; 使用场合: Applet;只需XML文档的少量内容,很少回头访问;机器内存少 SAX处理流程 xmlversion="1.0"? > 分析这个代码片断的SAX处理器一般情况下将产生以下事件: Startdocument Startelement(samples) Characters(whitespace) Startelement(server) Characters(UNIX) Endelement(server) Characters(whitespace) Startelement(monitor) Characters(color) Endelement(monitor) Characters(whitespace) Endelement(samples) SAXAPI允许开发人员捕捉这些事件并对它们作出反应。 SAX处理涉及以下步骤: 创建一个事件处理程序。 创建SAX解析器。 向解析器分配事件处理程序。 解析文档,同时向事件处理程序发送每个事件。 要实现SAX解析XML文档,有两种方法, XMLReader和XMLReaderFactory XMLReaderread=XMLReaderFactory.createXMLReader(); 生成XMLReader对象,使用XMLReader对象的方法parse(Filef,ContentHandlerhandler), ContentHandler是一个定义好事件处理方法的接口, DTDHandler,EntityResolver,ErrorHandler这三个接口和ContentHandler接口相同, 但是其中定义的是其他事件处理方法,一般只是实现ContentHandler接口。 使用SAX解析XML文档,需要先有SAXParserFactory对象,他的对象是通过自身的静态 方法newInstance(), 然后再通过SAXParserFactory对象来创建SAXParser对象,使用SAXParser对象的 parse(Filef,DefaultHandlerhandler),DefaultHandler是用来处理解析时发出的事件的类,就可 以进行解析。 DefaultHandler实现了ContentHandler,DTDHandler,EntityResolver,ErrorHandler,四个 接口,但是只给出了空实现,便于使用者覆盖相应的方法。 SAX解析的其他方法请参阅 org.xml.sax.helpers) JAVAAPI文档。 (javax.xml.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XML