XML

xml语法
XML标记文本,用来描述数据的性质和结构,严格区分大小写,有且只能有一个根元素,属性值必须放在 引号中,空格不会自动删除,标记可以随便定义并且可拓展

一个完整的XML文档中必须包含一个XML文档声明该声明必须位于文档的第一行
<? xml 版本信息 [编码信息][文档独立性信息]?>
1.版本声明
<? xml version="1.0" ?>
2.文档编码声明
<? xml version="1.0" encoding="gb2312"?>
3.独立文档声明
standalone="yes";独立文档不依赖外部文档
standalone="no"
<? xml version="1.0" encoding="gb2312" standalone="yes"?>
特殊字符处理
特殊字符

&-----&amp
<-----&lt
>-----&gt
"------&quot
'-------&apos

CDATA区
是Character data的简写不想被程序解析的一段原数据可以放在CDADA中
用法
<![CDATA[ &^*s!@#$]]>

XML的解析方式概述

1、解析方式:(W3C)
DOM:Document Object Model文档对象模型
Node:节点
Document:代表整棵树
Element:元素
Attr:属性(只有元素才有属性)
Text:文本
有点:增删改查方便,简单
缺点:需要读取整个xml才能构建DOM树。对于比较大的xml,容易导致内存溢出。
l SAX:Simpl API for Xml

利用JAXP开发包:DOM解析
1、常用的XML解析器:
JAXP、Dom4J、JDom
2、JAXP:
存在JDK中,SUN公司提供。
Java API for XML Processing=JAXP
由以下包:
org.w3c.dom:标准和规范(学习规范)
javax.xml:具体的实现

dtd约束

2、约束技术:DTD(简单,面临着淘汰) Schema
3、DTD:
约定了xml文件中可以出现的元素、属性等,及他们的顺序和个数。
DTD约束,文件的扩展名.dtd
4、编写DTD的方式:
方式一:dtd内容和xml都在xml文件中
直接把dtd的内容写在xml文件中。
比如:

    <?xml version=”1.0” encoding=”gbk”?>
    <!DOCTYPE 书架[                
        <!ELEMENT 书架 (书+)>
        <!ELEMENT 书 (书名,作者,售价)>
        <!ELEMENT 书名 (#PCDATA)>
        <!ELEMENT 作者 (#PCDATA)>
        <!ELEMENT 售价 (#PCDATA)>          
    ]>
    <书架>
         
    </书架>

方式二:dtd作为单独的文件存在(推荐)。文件扩展名.dtd,文件必须用UTF-8编码保存到磁上。

根据它的语法创建的文件称为DTD文件

1.<!ELEMEMT 书架(书+)>(书+)表示至少有一个书元素
2.<!ELEMEMT 书(书名,作者,售价)>书是元素名称,(书名,作者,售价)是书的子元素必须按照顺序出现
3.<!ELEMEMT 书名(#PCDATA)>
4.<!ELEMEMT 作者(#PCDATA)>
5.<!ELEMEMT 售价(#PCDATA)>#PCDATA普通文本字符串

引入外部DTD文件有两种方式
1.<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">
2.<!DOCTYPE 根元素名称 PUBLIC "DTD名称"SYSTEM "外部DTD文件的URI">
还可以采用内嵌的方式
<!DOCTYPE 根元素名称[
DTD定义语句
]>
EMPTY:表示元素不包含字符数据是一个空元素.<!ELEMEMT br EMPTY>br是一个没有内容的元素
ANY:表示元素可以包含任意的子元素和字符数据<!ELEMEMT l联系人 ANY>

属性定义

<!ATTLIST 元素名
属性名1 属性类型 设置说明
属性名 2 属性类型 设置说明
.>

设置说明
1.#REQUIRED
元素属性是必须的
2.#IMPLIED
元素可以包含该元素
3.#FIXED
一个固定的属性默认值
4.默认值
如果元素不包含该元素,该属性将自动设置为DTD中定义的默认值
属性类型
1.CDATA
2.Enumerated
3.ID用于唯一标识XML文档中的一个元素
4.IDREF和IDREFS可以使两个元素建立一对一的关系
5.NOTATION不易用XML组织的数据
6.NMTOKEN表示一种列表类型
7.ENTITY和ENTITYS

Schema约束

名称空间
唯一标识一个元素或者属性
属性名称必须以xmlns:作为前缀<元素名 xmlns:prefixname="URL">
默认名称空间<元素名 xmlns="URL">

引入Schema文档
1.使用名称空间引入XML Schema文档
需要通过属性xsi:schemaLocation来声明名称空间的文档,
2.不使用名称空间引入
xsi:noNamespaceschemaLocation

语法
元素定义
<xs:element name="xxx" type="yyy"/>
属性定义
<xs:attribute name="xxx" type="yyy"/>

简单类型
xs:simpleType
限制xs:restriction
xs:minInclusive,xs:maxInclusive对值的限定
xs:enumeration元素对一组值的限定
xs:pattern元素对一组值的限定
xs:restriction元素对空白符的限定

复杂类型
xs:simpleContent

XML中如何引入Schema约束(必须掌握)

1、查看Schema文档,找出根元素


2、根元素来自哪个名称空间
查看Schema的文档,找到targetNamespace的取值,在xml中用xmlns关键字声明该名称空间。”itheima”就是给名称空间取了一个短名称。


3、名称空间和哪个xsd文件对应?
使用schemaLocation来制定名称空间和xsd文件的对应关系


4、schemaLocation不是关键字,来自一个标准的名称空间

XML中如何引入Schema约束
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.hhh.com" elementFormDefault="qualified">
    <xs:element name='书架'>
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded'>
                <xs:element name='书'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<hhh:书架 xmlns:hhh="http://www.hhh.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.hhh.com book.xsd">
    <hhh:书>
        <hhh:书名>故事</hhh:书名>
        <hhh:作者>哈哈</hhh:作者>
        <hhh:售价>10块</hhh:售价>
    </hhh:书>
</hhh:书架>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容