大二上假期学习——Day02——xml约束、xml编程、dom4j

一、XML约束

1.作用:

约束xml文档的写法;对xml进行校验。

2.分类

1)DTD

1.注意:

默认DTD约束在浏览器中是关闭的,可以另外写一个html执行JavaScript脚本开启约束验证。

2.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 元素名称 元素约束>

  1)元素约束:

    1.存放类型:ANY/EMPTY

    2.元素:子元素的列表,将可以包含的子元素用小括号括起来。

    3.子元素之间可以使用逗号进行分割,表明子元素必须按照顺序出现。

    4.子元素之间可以使用竖线进行分割,表明子元素只能出现其中之一。

    #PCDATA 表明包含标签体

 

    + 表示一次或多次

    * 0次或多次

    ? 0次或1次

 

    可以使用小括号表示组的操作。

2.属性

  <!ATTLIST 元素名 

          属性名1 属性类型 属性约束

          属性名2 属性类型 属性约束

          .......

  >

  1)属性类型:

    CDATA:表示属性的值是一个普通字符串

    ENUMERATED:属性的值是一个枚举列表中的值

    ID:表明属性的值必须在整个文档中都是唯一的,如有重复的ID则校验不通过 ,ID属性的值只能由字母,下划线开始,不能使用数字开始,不能出现空白字符

  2)属性约束:

    #REQUIRED --表明当前属性是一个必须存在属性,如果这样的属性不存在则校验时会报错。

    #IMPLIED --表明当前属性是一个可选的属性,可以有也可以没有。

    #FIXED '固定值' --表明当前属性有一个固定值,这样的属性不需要进行赋值,自动就会取这个固定值为值,如果这样的属性指定了一个不是固定值的值,则校验报错。

    '默认值' --表明当前属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默认值。

3.ENTITY(实体)

  <!ENTITY > 就是对于一大段内容的引用,可以简化代码的复用

  1)引用实体:在xml中引用的实体叫做引用实体

    <!ENTITY 实体名称 "实体内容">

    &实体名称;

  2)参数实体:在DTD中引用的实体叫做参数实体

    <!ENTITY % 实体名称 "实体内容">

    &实体名称;

二、XML编程:利用java程序去增删改查(CRUD)xml中的数据

1.dom解析:

过程:形成一颗树,利用Node接口进行操作,树中对象都实现过Node接口

优点:

  1)十分便于进行增删改查的操作

  2)只需解析一次拿到dom对象后可以重复使用此对象,减少解析的次数

缺点:

  1)首次解析过程比较慢,需要将整个文档都解析完成后才能进行操作

  2)需要将整个树的内容都加载到内存中来,比较耗费内存,当文档过大时,这种解析方式对内存的损耗非常的严重

2.sax解析:

过程:解析器逐级解析文档,遇到元素触发事件处理器中的函数

优点:

  1)不需要等待整个xml加载到内存,当解析到某一部分时自动触发到对应的方法去做处理,处理的效率比较高

  2)不需要将整个文档加载到内存中,对内存的损耗比较少,无论多大的xml项目理论上都可以计算

缺点:

  1)每次解析都只能处理一次,下次再想处理还要重新解析

  2)只能进行查询不能进行增删改的操作

3.解析思想:

dom解析

sax解析

基于这两种解析思想市面上就有了很多的解析api:

sun jaxp 既有dom方式也有sax方式,并且这套解析api已经加入到j2se的规范中,意味着不需要导入任何第三方开发包就可以直接使用这种解析方式,但是这种解析方式效率低下。

dom4j 可以使用dom方式高效的解析xml

4.dom4j

导入开发包,一般只需要核心包,若需其它则再导入

流程:

posted @ 2023-01-09 22:50  sodamate  阅读(14)  评论(0编辑  收藏  举报