xml入门
1.常见用途(1)数据传送通用格式 比如qq之间的数据传送做案例进行详细讲解,用xml格式来传送数据,具有良好的可读性性,可维护性。
(2)配置文件 xml文件做配置文件可以说非常的普遍,比如我们的tomcat服务器的server.xml ,web.xml 。 在比如我们的struts中的struts-config.xml文件,和hibernate的hibernate.cfg.xml ..... (3)充当小型数据库 xml文件做小型数据库,也是不错的选择,我们程序中可能用到一些经常要人工配置的数据,如果放在数据库中读取不合适(因为你要增加维护数据库工作),则可以考虑直接用xm来做小型数据库【比如msn中保存用户聊天记录就是用xml文件的】,而且直接读取文件显然要比读取数据库快。 2.Xml语法入门案例:用xml来记录一个班级信息 1 <?xml version="1.0" encoding="utf-8"?> 2 <xml-body> 3 class 4 stu id="001" 5 name>杨过</ 6 sex>男 7 age>30 8 stu 9 ="002"10 >李莫愁11 >女12 >2013 14 15 > ? 编码问题: ansi是american national standard insititu美国国家标准协会。 ansi编码在不同的国家是不一样的,更确切的说是和操作系统的语言是一直的,例如我们现在用的操作系统是简体中文版,即gb2312,则此时ansi编码的表现形式就是gb2312。但是如果你使用的是繁体中文则ansi的表现形式就是gbk或者big5。如果你使用的操作系统韩语版的,则ansi的表现则为韩文操作系统默认的编码。所以在xml中定义编码(encoding)的时候,一定要和文件的编码方式一直,否则会出错:
(1)文档声明 <?xml version=”1.0” encoding=”编码方式” standalone=”yes|no”?> XML声明放在XML文档的第一行 XML声明由以下几个部分组成: version - -文档符合XML1.0规范,我们学习1.0 encoding - -文档字符编码,比如”gb2312” standalone - -文档定义是否独立使用 standalone="yes“ standalone=“no” 默认 (2)一个xml文档中,有且只有一个根元素(元素==标签==节点) (3)对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的: >xiaoming> 不等价与 >
xiaoming
由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,要特别注意。
(4)属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔),一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值"> 特定的属性名称在同一个元素标记中只能出现一次,属性值不能包括<,>,& 特别说明:如果属性值有单引号,又有双引号,则需要使用实体: html-> ©
="a"0'0'1"> 一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范: 区分大小写,例如,<P>和<p>是两个不同的标记。 不能以数字或"_" (下划线)开头。 不能包含空格。 名称中间不能包含冒号(:)。 (5)CDATA节 有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,用于把整段文本解释为纯字符数据而不是标记的情况。包含大量<、>、&或者"字符。CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。 语法: <![CDATA[ …… ]]> 可以输入任意字符(除]]>外),不能嵌套 有时我们希望传递一些特殊字符,<>@!#$%^&*(可以使用CDATA节包括) intro><![CDATA[这个是好$$128qw8o8<Lk;>;akdf0sa98u329408><<K>>>学生]]> 面试题:
问;如何适用xml去传递小图片 答: 可以把文件读取成一个byte[],然后放到 CDATA节,再传递. xml语法小结: XML声明语句 <?xml version="1.0" encoding="gb2312"?> 必须有且仅有一个根元素 标记大小写敏感 属性值用引号 标记成对 空标记须关闭 元素正确嵌套 名称中可以包含字母、数字或者其它字符 名称中不能含空格 名称中不能含冒号(注:冒号留给命名空间使用) 3. dtd(xml文件约束)3.1基本概念dtd ( document type definition文档类型定义),该文件一般和xml文件配合使用,主要的用途是约束xml,除了dtd技术外,还有一个schema的技术也可以用于约束xml文件的书写规范. 3.2问题引出及解决:="a"0'0'1" 8 面积>100平方10 13 14 16 > 怎么能给一个人添加一个面积元素呢?由于现在的xml处于自由状态,没有受到任任何约束,所以想怎么写就怎么写,所以就可以使用dtd来限制它。 解决xml过于自由的问题:->dtd 3.3 dtd和xml的关系: 3.4 dtd元素3.4.1语法
示例: 1 <!ELEMENT family (person+)2 ELEMENT person EMPTY> xml version="1.0" encoding="UTF-8"DOCTYPE family SYSTEM "dtdTest.dtd"3 family4 person></<!-- 正确 --> 5 ><>zhangsan 错误 6 >
因为我们设定person元素必须为空。而在xml文件中我们给它添加了子元素。 ELEMENT parent (#PCDATA)ELEMENT person ANY 3.4.2 dtd的元素的修饰符
3.5 dtd元素属性基本语法
属性的类型有五种: CDATA表示可以放入文本 ID表示属性的值,不能重复,同时不要用数字开头. IDREF/IDREFS当一个元素的属性值,需要去引用另外一个ID,则使用IDREF,如果希望引用多个,则使用IDREFS,请用空格隔开. Enumerated表示属性的值,只能是例举出了的。 属性的特点有四种 #REQUIRED 表示必须有 #IMPLIED 表示可以有 #FIXED “值” 表示如果有,则必须是什么 Default “值” 表示如果不指定,则默认. 如:
View Code
View Code
实体(ENTITY) 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。 就像在java 中,我们定义了一个字符串: String str=”你好”; 这样,在别的地方,我们使用str就可以访问到‘你好’
在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。 实体可分为两种类型:引用实体和参数实体。 引用实体 引用实体主要在 XML 文档中被应用 语法格式(dtd中定义): <!ENTITY 实体名称 “实体内容”> 引用方式(xml中引用) &实体名称; 案例 在dtd中定义: ENTITY mycopy "我的公司版权" 注:最好把定义放在dtd的最后
在xml中使用: &mycopy;
参数实体 参数实体被 DTD 文件自身使用 语法格式: ENTITY % 实体名称 "实体内容" 引用方式:
%实体名称; 示例1:
示例2: >
View Code
3.6 快速入门案例Xml1.dtd Xml1.xml
注:现在可能还看不懂一些里面的东西,我们后面会一一说明的。
编程校验XML文档正确性(xmlspy) : IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。 创建xml文档解析器对象: 这样我们就可以检测我们的xml是否有误了:
由于,我们刚才写的Xml1.xml是符合dtd规则的。所以该html显示为:
随着后面的讲解,我们会把错误显示出来的。 3.7dtd的分类(1)内部dtd 注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。
(2)外部dtd dtd文件: xml文件:
3.8在xml中引入dtd的方法
(1)内部dtd 不用引入。 (2)外部dtd <1>引入本地dtd DOCTYPE 根元素 SYSTEM ‘地址’>
<2>引入公共的dtd DOCTYPE 根元素 PUBLIC ‘url地址’ <3>内外部dtd
DOCTYPE 根元素 SYSTEM "DTD文件路径" [
定义内容
]>
3.9 学习dtd的目标一般公司很少让程序员自己写 dtd,要求程序员看的懂dtd,同时可以根据给出的dtd,写出对应的xml 3.10 DTD的局限性DTD语法与XML语法存在差异; 缺少对XML名称空间的支持; 缺少数据分类; 内容模型描述收到限制。 4. xml 命名空间用途:XML 命名空间提供避免元素命名冲突的方法。 4.1 问题的引出xml1.xml table2 tr3 td>Apples4 >Bananas5 xml2.xml |