XML技术

一、XML简介
  1、定义:XML的本质是一段字符串。
  2、XML的应用场景:
    (1)XML具有跨平台性的特性,因此XML常被用来在不同系统之间进行数据交换。
    (2)XML可以在保存数据的同时保存数据之间的关系。利用这一特点,它还经常用作应用程序配置文件来使用。
二、xml语法
  1.文档声明
    (1)用来声明xml的基本属性,用来指挥解析引擎如何去解析当前xml
    (2)通常一个xml都要包含并且只能包含一个文档声明
    (3)xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容
    (4)文档声明属性
    <?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.元素
    (1)标签与元素:一个xml标签就是一个元素
    (2)开始标签和结束标签:一个标签分为开始标签和结束标签
    (3)标签体:在开始标签和结束标签之间可以包含文本内容,这样的文本内容叫做标签体
    (4)自闭标签:如果标签的开始标签和结束标签之间不包含标签和子标签则可以将开始标签和结束标签进行合并,这样的标签就叫做自闭标签
    (5)标签嵌套:一个标签中也可以包含任意多个子标签,但是一定要注意标签一定要合理嵌套
    (6)根标签与子孙标签:一个格式良好的xml要包含并且只能包含一个根标签,其他的标签都应该是这个标签的子孙标签
    (7)标签书写注意:
      区分大小写,例如,<P>和<p>是两个不同的标记。
      不能以数字或标点符号或"_"开头。
      不能以xml(或XML、或Xml 等)开头。
      不能包含空格
      名称中间不能包含冒号(:)。
  3.属性
    一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
    <china capital="beijing"/>
    属性的名在定义时要遵循和xml元素相同的命名规则
    属性的值需要用单引号或双引号括起来
  4. 注释
  (1)格式<!-- 注释内容 -->
  (2)注释可以出现在xml文档的任意位置除了整个文档的最前面,但不能出现在文档声明之前
  (3)注释不能嵌套注释
  5.CDATA区和转义字符
  (1) <![CDATA[转义的内容]]>:
      当XML中一段内容不希望被解析器解析时可以使用CDATA区将其包住当解析器遇到CDATA区时会将其内容当作文本对待,不会进行解析
      语法:<![CDATA[ 内容 ]]>
   (2)转义字符:
    &  --> &amp;
    <  --> &lt;
    >  --> &gt;
    "  --> &quot;
    '  --> &apos;
  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中的数据
(1)解析思想:
dom解析特点:
1)将整个XML使用类似树的结构保存在内存中,再对其进行操作。
2)是W3C组织推荐的处理XML的一种方式。
3)需要等到XML完全加载进内存才可以进行操作。
4)耗费内存,当解析超大的XML时慎用。
4)可以方便的对xml进行增删该查操作。
sax解析
1)逐行扫描XML文档,当遇到标签时触发解析处理器,采用事件处理的方式解析xml
2)不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
3)在读取文档的同时即可对xml进行处理,不必等到文档加载结束,相对快捷
4)不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML
5)只能用来读取XML中数据,无法进行增删改
(2)基于这两种解析思想市面上就有了很多的解析api
1)sun的jaxp:既有dom方式也有sax方式,并且这套解析api已经加入到j2se的规范中,意味这不需要导入任何第三方开发包就可以直接使用这种解析方式.但是这种解析方式效率低下,没什么人用.
2)dom4j:可以使用dom方式高效的解析xml.
3)pull:Android开发常用解析方式.
(3)dom4j的使用
导入开发包,通常只需要导入核心包就可以了,如果在使用的过程中提示少什么包到lib目录下在导入缺少的包即可
四、Schema -- xml的约束技术  --- 需要掌握名称空间的概念,会读简单的Schema就可以了,不需要大家自己会写
Schema是xml的约束技术,出现的目的是为了替代dtd
本身也是一个xml,非常方便使用xml的解析引擎进行解析
对名称空间有非常好的支持
支持更多的数据类型,并且支持用户自定义数据类型
可以进行语义级别的限定,限定能力大大强于dtd
相对于dtd不支持实体
相对于dtd复杂的多,学习成本比较的高

如何在xml中引入Schema ---
!!!!!名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置. ~~~
Schema的语法---参照Schema的文档,了解即可













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值