XML学习笔记

概述

XML(eXtensible Markup Language)全称可扩展标记语言。XML是跨平台的,这也是它为什么被广泛应用的原因。XML主要被用存储数据,系统配置和数据交换。

语法

1、 文档声明:只能位于xml的第一行,前面不能有空行或者注释。

<?xml version="1.0" encoding="UTF-8" standalone="yes/no"?>

version用来声明xml的版本,encoding指定xml的编码方式,standalone表示该xml文档是否依赖其他文件运行。
在使用记事本或eclipse编写xml时,会出现乱码的问题,都是与xml的编码格式以及本地的编码有关。要注意。

2、 元素:是xml文件中出现的标签。由开始和结束标签组成。如果一个元素没有内容可以使用简写。整个xml文档中只能有一个根标签,另外标签不能交叉使用。

<root>           有且只有一个根标签
    <a>xxxx</a>  一个普通标签
    <a/>         没有内容的标签的简写
    <b><c></b></c> 错误的写法
</root>

3、属性:使用“”或”括起来

<a name='xx' id='1'></a>

4、注释:xml声明之前不能有注释嵌套,注释不能嵌套使用。

<!-- 注释内容 -->
<!--  <!--  -->  --> 错误的写法

5、CDATA区:xml不会进行语法处理,只会原样输出。

<![CDATA[
    something...
]]>

6、转译字符:显示一些特殊字符。比如在标签中显示大于号>, 小于号<之类的。

&gt; 表示 > 符号。&lt; 表示 < 符号。

7、处理指令:简称PI,用来指挥解析器如何解析xml文档。

xml文档中引入xx.css

<?xml version="1.0" encoding="gb2312" standalone="yes" ?>
<?xml-stylesheet type="text/css" href="xx.css" ?>
<root>
    <cat id='cat1'>cat1</cat1>
</root>

xx.css文档

#cat1{
    color: red;
    text-font: 30px;
}

在解析xml文档时,就会按照css文件中的设置来显示字体。

约束
就是编写一个xml文档来约束另一个xml的书写规范。又叫文档约束。
常用的约束有DTD约束和Schema约束。
1、DTD约束:
Document Type Definition,全称文档类型定义。DTD约束的文档的后缀名为.dtd。
DTD约束可以写在一个单独的文件中,也可以写在xml文件中。写在xml文件中的格式:

<!DOCTYPE 根节点 [ 约束内容 ]>

在xml文件中引入dtd文件又分为两种,引入本地文件和引入公共文件。
引入本地文件的格式:

<!DOCTYPE 根节点 SYSTEM "xx.dtd">

引入公共文件的格式:

<!DOCTYPE 根节点 PUBLIC "DTD名称" "DTD的URL">

(1)定义元素:使用ELEMENT声明一个元素。

<!ELEMENT 元素名称 元素类型>

元素类型可以是元素内容或类型。如果为元素类型那么得使用()括起来。

<!ELEMENT 书 (书名,作者,售价)>  都得出现,并且出现的顺序不能有误
<!ELEMENT 书 (书名|作者|售价)>  出现一个就行
<!ELEMENT 书名 (#PCDATA)>      字符串类型

元素内容:, 符号,|符号,+、?、*符号。
元素类型:EMPTY(定义空元素),ANY(任意类型)
(2)定义属性:要使用ATTLIST声明属性。
格式:

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

属性值类型:CDATA(字符串),ENUMERATED(枚举), ID(唯一的), ENTITY(实体)。ID属性是不能以数字开头的,只能以字母或下划线开始。
设置声明:#REQUIRED(必须的), #IMPLIED(可选的), #FIXD(固定值), 还有一个默认值。一般对于FIXD和默认值,在写xml时,可写可不写。

默认值声明
DTD:
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

XML:
<square width="100" />

REQUIRED声明
DTD:
<!ATTLIST person number CDATA #REQUIRED>

正确的 XML:
<person number="5677" />

错误的 XML:
<person />

属性可选的
DTD:
<!ATTLIST payment type (check|cash) "cash">

XML :
<payment type="check" /><payment type="cash" />

(3)定义实体:给一段内容创建别名,以后再使用这段内容的时候就可以直接使用别名。使用ENTITY声明一个实体。
分类:引用实体和参数实体。
引用实体:主要被用于xml引用。

格式:<!ENTITY 实体名称 "实体内容">
引用:&实体名称
DTD 实例:

<!ENTITY writer SYSTEM "xxxx">

XML :

<author>&writer;</author>

参数实体:主要在dtd内部引用。

格式:<!ENTITY % 实体名称 "实体代码">
引用:%实体名称

2、Schema约束:
在使用DTD约束时,可以感觉到DTD约束的不够细致。比如在属性类型的设置中就没有数字类型的。所以为了弥补DTD约束的不足,Schema约束就诞生了。Schema约束符合XML语法结构,所以可以使用dom,sax解析Schema。另外Schema对命名空间支持较好(独有特点),但是不能定义实体(DTD的)。
Schema约束文件的后缀名为.xsd,这份约束文档又称为模式文档(根节点必须为Schema),根据这份约束文档写出的xml文档叫实例文档。

<?xml version="1.0"?>

<xs:schema>
...
...
</xs:schema>

在写Schema约束时,要将模式文档中的所有元素绑定到一个uri地址(名称空间)上,以后就直接调用uri。

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.xxx.com"
xmlns="http://www.xxx.com"
elementFormDefault="qualified">
...
...
</xs:schema>
xmlns="xxx"

xmlns说明了默认的命名空间是什么。

targetNamespace="http://www.xxx.com"

targetNamespace表示将当前Schema中的元素绑定到哪个命名空间。

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

显示了当前Schema中用到的元素来自”http://www.w3.org/2001/XMLSchema“这个命名空间,以后再使用这个空间的东西时要加上前缀xs。

elementFormDefault="qualified"

说明以后再使用这个命名空间中的元素时,必须加上命名空间的名字。

在xml中引入schema约束

<?xml version="1.0"?>

<note xmlns="http://www.xxx.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xxx.com xxx.xsd">

<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
xmlns="http://www.xxx.com"

表示当前使用的命名空间是什么。

xsi:schemaLocation="http://www.xxx.com xxx.xsd"

表示具体使用命名空间中的哪个约束。

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

指出schemaLocation命名空间的指向。
具体的教程可以看schema帮助文档或者去菜鸟。

XML解析
现在的主要解析方式有两种:dom解析和sax解析。
dom解析又可以分为jaxp解析,jdom解析和dom4j解析。解析效率从左到右依次增高,所以目前最常使用的是dom4j解析。但是jaxp是sun公司的,所以也有必要学习。
dom在解析xml文件时,会读取xml文件,将整个xml加载成一个dom树放进内存中。sax在解析xml文件时,是一行一行读取解析的,所以sax就只适合读取xml文件,不适合对xml文件删除、修改、增加的操作。但是dom解析时占用的内存会比sax的多。
各个解析的具体过程写到另外的文章中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值