XML

2018-09-07  本文已影响0人  打死你的小乌龟

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:书架>
上一篇下一篇

猜你喜欢

热点阅读