xml介绍 约束 解析

今天内容
1.xml介绍
2.xml约束
3.xml解析
以上内容可以看懂,理解
4.贪吃蛇(补充)
------------------------------------------------
1.xml
xml:可扩展的标记语言.
xml作用:用于存储与传输数据.

xml与html区别
? XML 不是 HTML 的替代。-----xml对应xlst 相当于css于html
? XML 和 HTML 为不同的目的而设计:
? XML 被设计为传输和存储数据,其焦点是数据的内容。
? HTML 被设计用来显示数据,其焦点是数据的外观。
? HTML 旨在显示信息,而 XML 旨在传输信息。
xml它的标记没有预定义

2.关于xml书写规范.它的组成部分
对于一个标准的xml它由以下几部分组成
文档声明
元素
属性
注释
CDATA区 、特殊字符
处理指令(processing instruction)

1.文档声明
作用:用于声明当前是一个xml文档.
写法:<?xml version="1.0" encoding="utf-8"?>

以上就是一个文档声明,它的作用是用来通知当前是一个xml文档.
version是一个属性 注意:在xml中它的语法要求比较严格 所有的属性必须使用引号引起。
对于version的值 它只能取1.0
encoding:它代表的是当前xml文档中的信息的编码. 常用的值有 gbk iso8859-1 gb18030 bg2312 utf-8
standalone:它的作用是描述当前文档是否是一个独立文档。 这个属性我们一般很少使用.
xml文档也可以被浏览器直接解析.

关于文档声明的注意事项:
1.文档本身编码要与encoding的编码一样.
2.所有的属性要使用引号引起.
3.关于全角空格问题.

2.元素--就是指我们的xml中的标签.

1.xml中的元素(也就是标签)必须有结束.(可以自关闭)

2.xml中的标签可以嵌套,但是不能交叉嵌套。

3.一个标准的xml,有且只有一个根元素.*********************************

4.在xml中回车换行都做为元素存在.

关于元素的命名规范
区分大小写,例如,<P>和<p>是两个不同的标记。
不能以数字或"_" (下划线)开头。
不能以xml(或XML、或Xml 等)开头。
不能包含空格。
名称中间不能包含冒号(:)。 --- Schema 它的名称中使用:进行特殊定义.

-----------------------------
3.属性

1.属性值必须使用单引呈或双引号引起。
2.尽量使用子元素来描述信息,不使用属性.

4.注释
<!--

-->
与html一样.

5.CDATA 区域.
CDATA区域中的内容会按原样显示,也就是说,不会被浏览器解析.

写法:<![CDATA[
内容
]]>

在什么时候使用:我们在文档中一些信息不需要浏览器解析,直接输出就可以将信息放置在CDATA区域。

如果在文档中,只是有一些比较少的内容需要原样输出也可以使用专义字符。

6.指令(PI)

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

xml总结:
所有 XML 元素都须有关闭标签
XML 标签对大小写敏感
XML 必须正确地嵌套顺序
XML 文档必须有根元素
XML 的属性值须加引号
特殊字符必须转义
XML 中的空格会被保留

-----------------------------------------------------------------
xml约束
约束:xml文档中可以写不可以写什么.
xml约束有两种
DTD------struts2框架,它就使用DTD做为约束.
SCHEMA-----后面 hibernate,spring中使用schema做为约束.

DTD简单--比较老.
SCHEMA---比较复杂 现在开发中一般都使用SCHEMA来对xml进行约束.

DTD
快速入门:
1.dtd约束的文件,后缀名是dtd。
2.使用DOCTYPE导入DTD

问题:怎样可以判断当前的dtd对xml文件进行约束,并且约束成功.
1.在开发,我们可以直接使用IDE进行约束检测。
2.可以直接使用js对xml文档它是否遵循dtd约束进行检查。

------------------------------------------
1.dtd与xml关联的三种方式.
1.内部dtd
就是在xml文件中直接写入了dtd约束.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
...
</书架>

2.外部dtd
dtd文件是一个单独文件。

1.本地dtd
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
2.网络上的dtd
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">

2.学习dtd语法
1.元素
怎样声明元素:
<!ELEMENT 元素的名称 元素的内容类型>

<!ELEMENT books (book+)> 说明books下的book可以出现一次或多次。

元素的内容类型
1.PCDATA: 文本信息
2.EMPTY:空
3.ANY: 可以是文本也可以是子元素.

关于元素书写注意的地方.
1.<!ELEMENT books (book+)> 在books与(book+)之间一定要有空格.
2.对于(#PCDATA) 必须加括号 如果是EMPTY ANY不用加

2.属性
属性定义格式
<!ATTLIST 元素名称 属性名称 类型 约束>

属性类型:CDATA 枚举 ID
CDATA 代表是一个字符串。
枚举 (en1|en2|en3...) 代表属性值必须从其中选择一个.
ID 属性值是唯一的.
属性约束:
#REQUIRED 必须的.
#FIXED 绑定某个值.
#默认值
例子
<ATTLIST book lang CDATA #REQUIRED> lang属性必有.
<ATTLIST book lang (en|zh) #REQUIRED> lang属性必有,只能在zh与en之间取值.
<ATTLIST book lang CDATA #FIXED "en"> lang属性已经绑定值,值只能是en。
<ATTLIST book lang ID #REQUIRED> lang属性必须有,并且唯一.
<ATTLIST book lang CDATA "zh"> lang属性如果没有写,默认值为zh,写了就取写入的属性值.

3.实体

什么是实体:
就是在我们xml或dtd文件中有一些重复的信息,我们可以将其声明成实例,使用时,直接使用实体就可以。

实体分为两种
1.引用实体---在xml文档中使用
2.参数实体---在dtd文档中使用.

1.引用实体:
语法格式:
<!ENTITY 实体名称 “实体内容” >:直接转变成实体内容
引用方式:
&实体名称;

参数实体必须用于外部DTD文件中,不能用于内部DTD

2.参数实体
语法格式化:
<!ENTITY % 实体名称 “实体内容” >:直接转变成实体内容
引用方式
%实体名称;

----------------------------------------------------------------------------------
SCHEMA
它也是xml文件一种约束方式.

DTD与SCHEMA 区别?
1.dtd文档本身具有自己的语法规则。
SCHEMA本质就是一个xml文件,它遵行xml语法.

2.DTD文档对xml进行约束时,不能明确数据类型.
SCHEMA它可以精确的描述数据类型.

3.DTD文件的后缀是dtd。
SCHEMA文件的后缀是 XSD。

模型文档---xsd
实例文档---xml

重要概念:名称空间

快速入门---目的:了解名称空间
1.做一个xml文件. books.xml
<books>
<book>
<name>java编程思想</name>
<price>99</price>
<author>tom</author>
</book>
</books>

2.定义一个schema约束文件.(后缀是xsd)
在ide中让其自动创建schema.

3.了解关于schema中定义元素与元素之间的关系问题;
对于一个可以包含元素的元素-----复杂类型
<element name="books">
<complexType><!-- 用于定义一个复杂元素 -->
<sequence> <!-- 规定顺序 -->
<element name="book">
<complexType>
<sequence>
<element name="name" type="string"/>
<element name="price" type="double"/>
<element name="author" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>

4.将我们的schema约束文件关联到xml文件中.

----------------------------------------------------------------------------
复习:
1.xml
组成部分:1.文档声明 2.元素 3.属性 4.注释 5.CDATA 6.指令。

2.约束
1.DTD
导入方式三种
1.内部
2.外部
1.本地 SYSTEM
2.网络 PUBLIC
2.DTD----元素 属性 实体

3.SCHEMA----名称空间
它是用于定义一个名字,给我们xsd文件起一个可以挂起的位置。这是一个虚拟的名称,
一般情况下,我们使用域名 (http;//www.itcast.cn),在xml文件中可以导入我们的名称空间,
并在主个空间下查找到我们的xsd文件。这样就可以对xml进行约束。

schema与dtd区别。

----------------------------------------------------------------
关于schema语法

1.所有的schema文档(xsd文件),它们的根元素全是schema
2.targetNamespace---用于定义名称空间
3.xmlns---用于引入一个名称空间

在xmlns:名称
这个名称是前缀,它可以帮助在一个xml文件中导入多个schema时,进行区分.

4.elementFormDefault 用于控制前缀在什么时候可以写.
unqualified: 根元素加前缀,子元素可以不加
qualified:根元素加前缀,子元素必须加。

关于在schema文件中定义属性.
定义元素element
maxOccurs属性可以定义子元素的个数.

--------------------------------------------------------
定义两个xsd文件,在一个xml文件中导入.

books.xml

books.xsd---将这个xsd中的price元素在price.xsd中声明.

price.xsd ---它里面声明一个price元素,要求 值必须在50-100之间。

-------------------------------------------------------------------------------------
关于解析xml文件.
javascript时,通过js对xml进行解析,生成document对象。
通过js解析是客户端操作。

在服务器端通过java代码对xml进行解析.

解析xml----就是对xml文件进行读写操作.(我们不是使用io)

关于java中怎样解析xml文件(方式)
解析xml有两种方式
1.dom
2.sax
3.pull

关于dom与sax解析的区别?
什么是dom解析:将整个xml文档加载到jvm内存中,生成一个dom树。我们可以很方便的对xml进行读写操作.
什么是sax解析:这种方式是基于事件驱动。读取一行,解析一行。所以sax解析只能进行读操作,不能进行写操作。

xml解析具体实现
Jaxp(sun)---sum标准 解析方式 dom sax解析 不需要导入任何jar包 jdk中就包含API
以下两种方式,如果要使用,需要导入第三方jar包
Jdom、
dom4j(重点)---在框架中应用比较多 struts2 hibernate spring

hibernate4以后,关于xml解析采用 xstream。(后面会讲)

----------------------------------------------------------------------------------------------
jaxp的解析:

JAXP 开发包是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包组成

对于dom树,所有节点 Node Element Text Attr Document

1.dom解析.
对books.xml文件进行dom解析
步骤:
1.DocumentBuilderFactory---关于dom解析工厂,得到这个工厂就可以获取解析器.
2.DocumentBuilder ---解析器类,通过解析器类可以获取xml文件的Document对象.
3.Document代表整个文档,其实就是dom树,我们得到这个树就可以操作树中的任意一个节点.

得到Document对象后使用的API

1.getElementsByTagName(String name); 根据名称获取标签.
2.getTextContent(); 获取标签中的文本信息.

NodeList
1.getLength() 得到长度
2.Node item(int index) 得到第几项.

3.getChildNodes() 获取所有子节点.

4.getNodeName() getNodeType() getNodeValue();

问题:将整个文档中的所有内容都遍历出来,怎样做?

需要使用递归方式,怎样判断是否结束。 hasChildNodes()这个方法可以判断是否具有子元素。

如果有子元素,使用getChildNodes()去获取,

作用扩展题:完成对一个xml文件的遍历。
--------------------------------------------------------------------------------------
5.getAttribute() 获取属性

6.关于jaxp的create操作

创建Element-----document.createElement("name")
创建Attribute---
创建Text -------element.setTextContent("textvalue");

7.修改

8.删除
getParentNode() 获取父节点.

removeChild() 删除子节点. 注意要通过父节点来操作。

removeAttribute();---删除属性操作.

---------------------------------------------------------------------------------

2.sax解析(了解)
它只能读不能写。
它是基于事件驱动方式。

时间: 2024-12-12 23:31:22

xml介绍 约束 解析的相关文章

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

XML的约束与XML/HTML的解析

XML: 概念:Extensible Markup Language 可扩展标记语言 可扩展:标签都是自定义的. 功能 存储数据 配置文件 在网络中传输 xml与html的区别 xml标签都是自定义的,html标签是预定义. xml的语法严格,html语法松散 xml是存储数据的,html是展示数据 w3c:万维网联盟 语法: 基本语法: xml文档的后缀名 .xml xml第一行必须定义为文档声明 xml文档中有且仅有一个根标签 属性值必须使用引号(单双都可)引起来 标签必须正确关闭 xml标

XML——XML文件约束之DTD详解

1.XML文件约束与DTD的简单介绍 我们编写文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术有: XML DTD XML Schema DTD的基本概念: document type definition 文档类型定义 DTD文件一般和XML文件配合使用,主要是为了约束XML文件. XML文件引入DTD文件,这样XML可以自定义标签,但又受到DTD文件的约束.比如上一节使用XML描述一个班级的信息,如果我们给每一个学生定义一个<面积>标签,语法上也是没有错误的,但是不

XML(二)之DTD——XML文件约束

前面介绍了XML的作用和基本的格式,今天我给大家分享的是关于XML的约束.废话不多说,我们直接来正题! 一.DTD简介 1.1.DTD概述 DTD(Document Type Definition,文档类型定义) 1)DTD是一套关于标记符的语法规则.它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分. 2)XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD, 各公司都能够依照DTD建立XM

jaxp解析XML之DOM解析

XML解析技术XML解析方式分为三种一种是DOM解析一种是SAX解析 DOM思想:将整个xml加载入内存,形成围挡对象,所有对xml操作都是对内存中节点对象进行,DOM是官方xml解析标准,同时支持解析其他各种语言 SAX解析方式的出现,因为DOM的解析方式需要对文档进行加载入内存,当文档较大的时候比较消耗资源,这时候就出现了SAX解析SAX思想:一边解析,一边处理,一边释放资源 在JDK6中又引入了另一种StAX解析方式是一种拉模式的xml解析方式,而SAX是一种推模式XML解析方式推模式由服

php对xml文件的解析

近来较少写博客了,得克服懒惰的秉性啊! 今天研究了一下php对xml文件的解析. 用到了php的simplexml_load_file()方法,该方法会将xml文件生成一个SimpleXMLElement对象,该对象是继承了Traversable接口的对象,即可以像数组那样遍历其子集. 这样,我们就可以循环得到xml文件的内容,不多说废话,上例子. 假设有如下内容,名为test.xml的xml文件: <?xml version="1.0" encoding="utf-8

iOS开发网络篇—XML数据的解析

iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document) XML举例 <videos> <video name="小黄人 第01部" length="30" /> <video name="小黄人 第02部&qu

XML 介绍

XML eXtensible Markup language:可扩展的标记语言 解决HTML不可扩展的问题, 作用:保存或传输数据,不是用来显示数据的. XML介绍 1.  基于文本格式的 2.  标签没有被预定义,需要自定义 3.  用于保存或传输数据,不是用来显示数据的. 4.  是元语言(可以通过这门语言开发其他的语言) 文档结构 1.最上面一行是文档的声明,注意:声明必须放在第一行 2.是一种树形的结构 3.必须包含根元素,在根元素中扩展到树叶 4.文档有元素.属性.值.注释.实体组成

Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上

                                                                                                                                               本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 在之前一篇博文中<<Android中View绘制流程以及invalidate()等相关方法分析>>,简单的阐述