XML

二阶段问题总结

1.servlet:每次都要继承,重写doget,dopost方法 。类太多,工具简陋

2.dao:固定格式代码太繁琐(我们要关注的其实只有sql语句和参数),拼接sql语句比较麻烦

3.导包:管理包太麻烦

4.版本控制工具

5.便捷的权限管理工具


一、XML

1.定义

xml全称可扩展标记语言(eXtensible Markup Language), 她也是一种标记语言, 类似于html,但是它比html的语法要严格的多, 而且配有检查文件来检查语法格式, 同时, xml的标签是可以扩展的, 也就是说我们可以自定义标签和格式

通过学习我们知道, html是用来表示显示效果的, 不同的标签和属性代表着不同的样式, 但是xml不是, 这里要记清楚, xml设计出来就是为了传输数据的, 所以, xml的格式非常严谨

2.特点

可扩展

自定义

语法严格

传输数据

3.版本

xml 1.0 常用

xml 1.1 不向下兼容


二、XML的语法

1.选择XML做配置文件的原因

语法严格,稍有不对就报错

规则可自定义

2.文档声明

<?xml version="1.0"?>  必须在第一行第一列

vserion :版本

encoding : 编码 常用utf-8

standalone yes/no 独立/不独立  (默认是yes) 如果no,可以引入外部文件

3.元素

指出现在文档中的标签,分为开始和结束

如果标签中有内容,就必须有结束标签,如果没有内容,可以内部闭合

可以嵌套使用,但是不能相互嵌套

只能有一个根节点

命名规范:

    区分大小写

    不能以数字开头

    元素中不能包含空格和冒号

4.属性

写在标签内的, 一种key-value的格式 , value必须用双引号和单引号包裹

元素中的属性不允许重复

命名规范和元素的命名规范相同

5.注释

格式

<!-- 注释内容-->

不能嵌套

6.特殊字符

特殊字符和html类似, 因为xml本身使用了一些字符, 所以这些已经被使用的字符本身是具有特殊含义的, 并且是可以被xml本身解析的, 所有如果我们想使用的话就必须要使用其他的组合字符代替

如 < : &lt

7.CADATA区

格式

< ! [ CDATA [ 文本内容 ] ] >

CDATA中的内容会当作普通文本内容进行处理

8.PI(处理指令)(了解)

一些具有特殊功能的指令, 可以对标签或者标签的内容进行解析

9.演示


三、约束

约束限制着当前xml页面中的规则,哪些能用哪些不能用都在约束中限制死了

要想写一个框架的配置文件,第一步要在页面中引入这个框架的配置文件的约束

分类

    dtd约束

    schema约束


四、DTD约束

1.定义

一种常用的定义xml元素规则的语法格式

简单易懂

2.元素定义

< ! ELEMENT 标签名 ( )> 用来定义标签

( # PCDATA ) 简单标签,内部包含的是字符串等简单内容

EMPTY 表示空的 ,内部闭合

ANY  表示任意

子元素

    子元素直接的关系

        " , " 表示and

        " | " 表示or

    子元素出现的次数

        " + " 表示出现1次或多次

        " * " 表示出现0次或多次

        " ? " 表示出现0次或1次

3.属性定义

< ! ATTLIST 元素名称 属性名称 属性类型 属性约束 ... >

属性类型

    CDATA     文本

    枚举     ( 值1 | 值2 )

    ID     不能重复,不能只有数字,不能以数字开头

属性约束

    " #REQUIRED "     必须的

    " #IMPLIED "     属性是可选的

    " #FIXED "     固定值

    默认值     直接写

4.实体定义(了解)

<!ENTITY 别名 "值">

&实体名;    引入实体

只有内部引入才能使用,比较鸡肋,基本不用

5.引用形式

xml文件内编写

内部

< ! DOCTYPE students[

]>

引入本地文件


引入网络约束

< ! DOCTYPE 根节点 PUBLIC "DTD文件的名称" "DTD文件的地址">


五. schema约束

1.定义

schema也是一种用于定义和描述xml文档结构内容的模式语言, 主要是为了克服DTD的局限性而出现的

2.特点

符合xml的语法

DOM或者SAX解析更容易解析schema的文档

schema文档对名称空间支持的非常好

支持更多的数据类型 并支持用户自定义新的数据类型

chema定义约束的能力更强大,可以对XML实例文档作出细致的语义限制

schema使用一套预先规定的xml元素创建, 更有逻辑性

3.语法

扩展名是 .xsd

引入W3C的名称空间在根节点上

    xmlns="http://www.w3.org/2001/XMLSchema"

定义元素

    使用提供的<element>标签来定义元素

    用name属性来定义元素的名称

简单元素

    使用type属性来确定简单元素

复杂元素

    <complexType>  标示复杂元素

        <sequence>  表示按顺序出现

        <all>              表示随机的,1次,唯一的一次

        <choice>      表示选一个

    属性

        minOccurs    表示最小出现次数

        maxOccurs  表示最大出现次数

        unbounded    表示上不封顶


一旦一个元素要定属性,那么这个元素就变成了复杂元素

4.引入

首先schema约束文件必须要有名称空间, 随意写(推荐使用uri),尽量保持唯一

确定elementFormDefault的值

    qualified    质量好的

    unqualified 质量不好的


在目标xml文件的跟节点上引入W3C的名称空间

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


通过xmlns引入我们自己约束的名称空间 xmlns="http://com.qianfeng/my"

通过xsi:schemaLocation属性引入约束的地址,必须先指明是哪个名称空间的地址

    xsi:schemaLocation="http://www.example.org/my  my.xsd" (说明约束对应的文件地址)


引入本地文件



5.演示

约束文件


引入



六. XML解析 SAX DOM

1.定义

对xml文件的内容结构进行分析包装,返回我们java可以操作的对象

2.分类

SAX解析

    基于时间驱动和事件处理器, 边读边解析

    优点: 不会产生内存溢出问题, 速度比较快

    缺点: 不能做增删改

    现在的sax解析框架做出了一些优化, 也可以做增删改操作, 但是其实也是在内存中生成完整的文档结构, 只是做了一些优化, 效率要高很多

    DOM解析

        整片读取, 然后再内容中生成树状结构

        优点: 可以完整的查看文档,方便于做增删改

        缺点: 如果文档过大, 容易产生内存溢出的问题


七. JAXP操作XML

1.SAX

2.DOM

常用方法

getElementsByTagName()    通过元素的名称获取元素

getElementsById()                通过元素的id获取元素

createElement()                    创建一个指定名称的元素

appendChild()                      添加一个子元素

演示



八. Dom4J

1.定义

原生JAXP解析使用起来及其麻烦, Dom4J是一款非常优秀的解析器框架, 包含SAX和DOM两种解析方法

使用前必须导入dom4.jar包

2.常用方法

getRootElement()  获取根元素

elements()            获取所有子元素(剔除Text节点)

addElement()        添加元素

setText()                设置元素的内容

getText()                获取元素的内容

3.SAX解析

4.DOM解析

和SAX方法基本相同



总结

1.xml

    一种标记语言, 格式类似于html ,但是语法比html要严格很多很多

    一种文本文件的书写格式

2.有什么用?

    作为配置文件

    配置文件就应该 格式清晰, 语法严格, xml刚好符合这个特点

3.是什么在检测xml的语法格式?

    约束 :  dtd  schema

    dtd : 简单易学, 约束力较弱

    schema : 语法繁琐, 约束力强

4.xml引入dtd约束

    内部

    <!DOCTYPE 根节点 [

        <!ELEMENT 元素名 (复杂/简单)>

        <!ATTLIST 元素名  属性名 属性类型  必要性>

    ]>

    本地

    <!DOCTYPE 根节点   SYSTEM "约束文件地址" >

    网络

    <!DOCTYPE 根节点   PUBLIC "网络名称" "网络地址" >

5.xml引入schema约束

    <根节点xmlns:xsi="w3c的约束"xmlns="自己约束的名称空间"

    xsi:schemaLocation="自己约束的名称空间 自己约束的地址">

    </根节点>

6.java代码如何使用xml文档

    使用解析器解析文档 :  JAXP DOM4J

    解析方式 SAX DOM

7.SAX 和 DOM 解析

    SAX : 只能读取  速度快 内存占用率低

    DOM : 可以增删改查, 速度慢, 内存占用率高

8.DOM4J

    dom4j说自己的sax解析也能增删改查,而且效率高  , 我们信了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358