一、xml语法 1.文档声明 用来声明xml的基本
属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何
内容 <?xml version="1.0" ?>--version是必须存在的
属性,表明当前xml所遵循规范的版本,目前位置都写1.0就可以了 <?xml version="1.0" encoding="utf-8" ?>--encoding用来只会解析引擎在解析xml时使用的编码,一定要保证xml格式的数据在保存时使用的编码和解析时使用的编码必须一致,才不会有乱码问题 <?xml version="1.0" encoding="utf-8" standalone="yes" />--standalone
属性用来指明当前xml是否是一个独立的xml,默认值是yes表明当前文档不需要依赖于其他文档,如果当前文档依赖其他文档而存在则需要将此值设置为no 2.元素 一个xml
标签就是一个元素 一个
标签分为开始
标签和结束
标签 在开始
标签和结束
标签之间可以包含文本
内容,这样的文本
内容叫做
标签体 如果
标签的开始
标签和结束
标签之间不包含
标签和子
标签则可以将开始
标签和结束
标签进行合并,这样的
标签就叫做自闭
标签 一个
标签中也可以包含任意多个子
标签,但是一定要注意
标签一定要合理嵌套 一个格式良好的xml要包含并且只能包含一个根
标签,其他的
标签都应该是这个
标签的子孙
标签 区分大小写,例如,<P>和<p>是两个不同的
标记。 不能以数字或
标点符号或"_"开头。 不能以xml(或XML、或Xml 等)开头。 不能包含空格
名称中间不能包含冒号(:)。 3.
属性 一个
标签可以有多个
属性,每个
属性都有它自己的
名称和取值,例如: <china capital="beijing"/>
属性的名在定义时要遵循和xml元素相同的命名规则
属性的值需要用单引号或双引号括起来 4. 注释 <!-- 注释
内容 --> 注释可以出现在xml文档的任意位置除了整个文档的最前面.不能出现在文档声明之前 注释不能嵌套注释 5.CDATA区/转义字符 <![CDATA[转义的
内容]]>: 当XML中一段
内容不希望被解析器解析时可以使用CDATA区将其包住 当解析器遇到CDATA区时会将其
内容当作文本对待,不会进行解析 语法:<![CDATA[
内容 ]]> 转义字符: & --> & < --> < > --> > " --> " ' --> ' 6.处理指令 处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档
内容。 <?xml-stylesheet type="text/css" href="1.css"?> 二、dtd语法 --- 了解语法,看得懂dtd就可以 1.如何在xml中引入dtd (1)外部引入 可以将dtd的约束
内容写在外置的dtd
文件中,这个
文件后缀必须为.dtd而
文件保存时必须用utf-8编码保存. 再在xml
文件中使用 <!DOCTYPE 根元素
名称 SYSTEM
文件的位置> 如果写的是SYSTEM表明当前引入的dtd在当前
文件系统中,后面制定的
文件位置是当前硬盘中的位置 <!DOCTYPE 文档根结点 PUBLIC "DTD
名称" "DTD
文件的URL"> 如果写的是PUBLIC表明当前引入的dtd在网络公共位置中,后面要指明dtd的名字和dtd所在网络位置
URL地址 (2)内部引入 直接在xml中书写dtd <!DOCTYPE 根元素
名称[ dtd约束.... ]> 2.dtd语法 (1)元素 <!ELEMENT 元素
名称 元素约束> 元素约束: 存放类型:ANY/EMPTY 元素约束:子元素的列表,将可以包含的子元素用小括号括起来 子元素之间可以使用逗号进行分割,表明子元素必须按照顺序出现 子元素之间可以使用竖线进行分割,表面子元素出现其中之一 #PCDATA 表明包含
标签体 + 表示一次或多次 * 0次或多次 ? 0次或一次 也可以使用小括号进行组的操作 (2)
属性 <!ATTLIST 元素名
属性名
属性类型
属性约束
属性名2
属性类型
属性约束 ...... >
属性类型: CDATA:表示
属性的值是一个普通字符串 ENUMERATED :
属性的值是一个枚举列表中的值 ID: 表明
属性的值必须在整个文档中都是唯一的,如果有重复的id则校验不通过,ID
属性的值只能由字母,下划线开始,不能使用数字,不能出现空白字符
属性约束: #
required --- 表明当前
属性是一个必须存在的
属性,如果这样的
属性不存在则在校验时会报错 #IMPLIED --- 表明当前
属性是一个可选的
属性,可以有也可以没有 #FIXED '固定值' --- 表明当前
属性具有一个固定值,这样的
属性不需要进行赋值,
自动就会取这个固定值为值.如果这样的
属性指定了一个不是固定值的值则校验报错 '默认值' --- 表明当前
属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默认值 (3)ENTITY(实体) <!ENTITY >,就是对一大段
内容的引用,可以简化
代码的复用 引用实体:在xml中引用的实体叫做引用实体 <!ENTITY 实体
名称 “实体
内容” > &实体
名称; 参数实体:在dtd中引用的实体叫做参数实体 <!ENTITY % 实体
名称 "实体
内容"> %实体
名称; 三、XML编程:利用java程序去增删改查(CRUD)xml中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了很多的解析api sun jaxp既有dom方式也有sax方式,并且这套解析api已经加入到j2se的规范中,意味这不需要导入任何第三方开发包就可以直接使用这种解析方式.但是这种解析方式效率低下,没什么人用. dom4j 可以使用dom方式高效的解析xml. pull !!dom4j 导入开发包,通常只需要导入核心包就可以了,如果在使用的过程中
提示少什么包到lib目录下在导入缺少的包即可 四、Schema -- xml的约束技术 --- 需要掌握
名称空间的概念,会读简单的Schema就可以了,不需要大家自己会写 Schema是xml的约束技术,出现的目的是为了替代dtd 本身也是一个xml,非常方便使用xml的解析引擎进行解析 对
名称空间有非常好的
支持 支持更多的数据类型,并且
支持用户自定义数据类型 可以进行语义级别的限定,限定能力大大强于dtd 相对于dtd
不支持实体 相对于dtd复杂的多,学习成本比较的高 如何在xml中引入Schema --- !!!!!
名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置. ~~~ Schema的语法---参照Schema的文档,了解即可
原文链接:https://www.f2er.com/xml/296641.html