XML知识点总结
1、XML 简介 XML是 :可扩展标志性语言(extendsible Markup Language)xml是w3c(万维网联盟,WEB技术最权威的国际中立性的技术标准机构)组织发布的技术 xml 有两个版本 1.0 1.1,这里需要注意的是我们使用的是使用1.0 版本(1.1不能向下兼容)。 先来解释一下这个可扩展标志性语言是什么意思: 标记型语言 :html是标记型语言、使用标签操作。可扩展:html里的标签都是固定的,每个标签都有特定的含义,XML 不是固定的,标签可以自己定义,比如可以写中文的标签<人></人> <person></person> 既然我们要学习XML,就需要知道xml 的用途 ** HTML 用以显示数据,XML也可以显示数据,但不是主要功能 ** XML 主要功能是 存储数据 2、XML的应用 在实际开发中我们主要把XML实现如下的功能: 不同系统之间传输数据,数据结构清晰,利于维护,用来表示生活中有关系的数据,经常用在配置文件,比如现在连接数据库,肯定要知道数据库IP地址用户名密码等,直接 写程序中不好维护, 单独放在一个配置文件中利于维护 3、XML的语法 要学习会使用XML就必须得会下面几点。 (1) xml的文档声明 * 创建一个文件 后缀名是 .xml* 如果写xml,第一步必须有一个文档声明(表示这是一个xml文档) <?xml version="1.0" encoding="utf-8"?>*** 文档声明必须是文档的第一行,并且是第一列 关于头文件属性的解释: - version:xml的版本 1.0(文中使用的版本) 1.1 - encoding: xml编码 gbk utf-8 iso8859-1(不包含中文) 等等,这个编码指定打开该文件时读取文件内容的编码,不是保存的编码 - standalone:是否需要依赖其他文件yes/no
编辑好xml文件后->默认按系统编码保存,通常是gbk -> 然后打开xml的时候,打开程序(例如IE)根据xml文件的encoding编码去解码 此时如果encoding 指定的编码跟保存时编码不一致,就会出问题,解决的办法是让 保存时和打开时的编码都一致 (2) 定义元素(标签) ** 标签定义要符合如下的规定:标签定义有开始必须要有结束:<person></person> 标签没有内容的可以在标签内结束<person value="as"/> 标签可以嵌套,但必须合理,例如下面这个例子: 合理:<a><b></b></a> 不合理: <a><b></a></b> **xml标签命名规则 标签的定义还得注意以下几个: ** 一个xml中, 只能有一个根标签,其他标签都是根标签下的标签** 在xml中把换行和空格都当成内容来解析
<a>1111</a> <a> 1111 </a>(3) 定义属性 上面已经说到xml是标记型文档,所以和HTML一样可以有属性,接下来我们就说如何定义属性: <person id="aaa" /> ** 属性定义的要求 (1) 一个标签可以有多个属性,比如:<person id="aaa" xx="aaa"></person> (2) 属性名称不能相同 (3) 属性名和属性值之间使用= ,属性值使用引号包起来(可以使单引号,也可以双引号) (4) 属性名称规范和元素规范一致
(4) 注释 * XML注释的写法: <!--xml的注释-->** 注意的地方 *** 注释不能嵌套,<!--<!---->-->这个是错误的 *** 注释不能放在文档的第一行,因为第一行是文档声明
** 特殊字符和html的特殊字符一样处理,这里也不过多说明了。 (6) CDATA 区 这个的功能是可以解决多个字符需要转义的操作,把这些内容放到CDATA区就不需要一个个转义了,这个也很少用到。 ** 写法<![CDATA[内容]]>,如:<![CDATA[a<b,a>b]]> ** CDATA 区会把特殊字符当文本内容,而不是标签
这个指令的功能是 可以在xml中设置样式 * 写法: <?xml-styleheet type="text/css" href="css路径"?> 注意: 只对英文标签名称起作用 (8) xml的约束 对元素严格规定,比如规定一个<persons>下面直接子节点只能是<person> 而不能是<猫> *约束技术 DTD 和schema,
4、DTD 快速入门 查看文档 DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。这里我也不多说了,这个可以看文档的,可以看文档或者百度百科学习。 5、DTD的三种引入方式 (1) 引入外部的dtd文件 <!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
(2) 使用内部的DTD文件 <!DOCTYPE 根元素名称 [<!ELEMENT person(name,age)> <!ELEMENT name(#PCDATA)> //表示在<name>和</name>标签之间可以插入字符或者子标签。 <!ELEMENT age(#PCDATA)> ]> #PCDATA (Parsed Character Data 被解析的字符数据 任何)
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
DTD 语法:<!ELEMENT 元素名 约束>
简单元素结构如下 <!ELEMENT name (#PCDATA)> (#PCDATA) :表示在<name>和</name>标签之间可以插入字符或者子标签EMPTY:元素为空(没有内容) ANY : 任意
(2)复杂元素 复杂元素结构如下 <!ELEMENT person (name,age,sex)> //注意空格 <!ELEMENT 元素名称 (子元素)>用下列符号 表示子元素出现的次数: +:表示一次或多次 ?:表示零次或一次 *:表示零次或多次 子元素之间用逗号隔开表示元素出现的顺序,如:<!ELEMENT person (name+,age?,sex*)> 子元素与出现次数之间用|隔开.表示元素只能出现其中的任意一个,如:<!ELEMENT person (name+|age?|sex*)>7、使用DTD来定义属性 定义属性语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束 > 而其中属性类型有三种 - CDATA :字符串,如: <!ATTLIST person id1 CDATA #REQUIRED> - 枚举 :表示只在一定范围内出现的值,而且每次出现其中一个,如: <!ATTLIST person id1 (AA|BB|CC) #REQUIRED> - 值只能是字母或者下划线开头,如: <!ATTLIST person id1 ID #REQUIRED> - #REQUIRE D 必须要存在 - #FIXED :表示一个固定值 #FIXED "AAA", 属性值必须 是设置的固定值 - 直接值 默认值 不写属性 ,使用直接值 写了属性,使用设置的那个值 <!ATTLIST person id1 CDATA "AAA"> 8、实体的定义 实体定义语法语法 :<!ENTITY 实体名称 "实体值"> 使用实体 &实体名称 注意:定义的实体需要写在内部DTD中,如果写在外部DTD,某些浏览器下可能得不到 9、XML的解析(重要) 我们都知道js使用DOM -- document object model 来解析HTML - document 、element对象、属性对象、文本对象、Node节点对象 xml 解析技术: dom 和 sax (1)dom解析 根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性,文本都封装为对象 缺点,如果文件过大会造成内存溢出 优点 , 方便实现增删改操作 (2)sax 解析 采用事件驱动,边读边解析,从上到下,一行一行的解析 缺点 :不能实现增删改操作 优点 :如果文件过大,不会造成内存溢出,方便实现查询操作 常用的解析器有 Dom4j,提供dom和sax两种方式的解析器 10、schema约束 为替代DTD存在 dtd语法 :<!ELEMENT 元素名称 约束> schema符合XML语法,是XML语句, 一个xml中可以有多个schema,多个schema用命名空间区分(类似JAVA的包名), dtd里有PCDATA类型,但是在schema中可以支持更多数据类型, 比如年龄 只能是整数 ,在schema中可以直接定义一个整型类型, schema语法更加复杂, 目前还不能代替dtd schema的快速入门 创建一个schema文件 后缀名是.xsd, 根节点<schema> 在schema文件里面 属性xmlns = "http://www.w3.org/2001/XMLSchema"; //表示你创建的是一个约束文档 属性tagetNamespace = "http://www.chj.com/2014"; //命名空间,如果要使用约束文件,直接通过这个地址引入 //当设置为unqualified时全局元素(可作为根元素)必须添加命名空间前缀,非全局元素不必添加前缀。 属性elementFormDefault="qualified" // 当设置为qualified时,所有的元素都必须添加前缀。 步骤 (1)、看xml中有多少个元素 <ELEMENT> (2)、看简单元素和复杂元素 <element name="person"> <complextype> //如果是复杂元素 <sequence> <element name="name" type="string"></element> <element name="age" type="intger"></element> </sequence> </cpmplextype> </element> (3)、在被约束的文件中引入约束文件 <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //instance表示这是一个被约束的文件,两个xmlns所以这里要取个xsi作为前缀区分 xmlns="http://www.luowg.com/2014"//是约束文件里的 targetNamespace xsi:schemaLocation="http://www.luowg.com/2014 xx.xsd">//targetNamespace 空格 约束文件的路径
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |