首页 > 代码库 > 2.XML语言
2.XML语言
XML语言
常见应用:
XML技术除用于 /*保存有关系的数据*/之外,它还经常作软件配置文件,以描述程序模块之间的关系。
在一个系统软件中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定
例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块支持,为了准确描述这种关系,此时使用XML文件最为合适。
<soft>
<A>
<A1></A1>
<A2></A2>
</A>
<B>
<B1></B1>
<B2></B2>
</B>
</soft>
一个XML文件分为以下几个内容:
文档声明:<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
字符编码通常需要写成 UTF-8,但是在windows默认是"gb2312",所以需要另存为 将字符编码改为UTF-8
用encoding属性说明文档的字符编码 ; 用standalone 属性说明文档是否独立
元素:XML元素指XML文件中出现的标签 (不允许交叉嵌套,只有一个根标签)
一个标签有如下几种形式:
包含标签体:<a>***</a>
不包含标签体:<a></a>,简写为<a/>
属性:
一个标签可以有多个属性值,每个属性都有它自己的名称和取值,例如:<input name = "text">
属性值一定要用双号或单引号引起来
定义属性必须遵守与标签相同的命名规范
在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:
<input>
<name>text</name>
</input>
注释:
XML文件中的注释采用:"<!--注释-->"格式。
注意: 1.XML 声明之前不能有注释 2.注释不能嵌套
CDATA区 、特殊字符:
对于CDATA 区域的内容,XML 解析程序不会处理,而是直接原封不动的输出
语法:<![CDATA[内容]]>
对于一些单个字符,若想显示其原始样式,也可以使用转义字符进行处理
(& < > " ‘) --(& < > " &apos) "
处理指令(processing instruction):简称PI。处理指令用来指挥解析引擎,应用css文件显示XML文档内容
例如在XML文档中可以使用xml-stylesheet指令。通知XML解析引擎,应用css文件显示xml文档内容
<?xml-stylesheet type = "text/css" href = "http://www.mamicode.com/1.css"?>
处理指令必须以 "<?" 作为开头,以 "?>"作为结尾,XML声明语句就是最常见的一种指令处理
XMLDTD约束和DTD校验
DTD(文档类型定义)
DTD校验可以在Myeclipse中进行
举例(DTD文件)(book.dtd): 举例(XML文件)
<!ELEMENT 书架(书+)> <?xml version = "1.0" ?>
//引用DTD约束(本地),本地 用 SYSTEM 网上的用 PUBLIC
<!ELEMENT 书(书名,作者,售价)> <!DOCTYPE 书架 SYSTEM "book.dtd">
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
这个约束文件对应的格式为
<书架>
<书>
<书名>JAVA</书名>
<作者>***</作者>
<售价>23.00元</售价>
<书>
<书名>MySQL</书名>
<作者>****</作者>
<售价>22.00元</售价>
</书>
</书架>
对于这个dtd约束文件的说明:
//使用ELEMENT声明一个XML元素:语法格式: <!ELEMENT 元素名称 元素类型>
元素类型可以是元素内容、或类型
如为元素内容,则需要用()括起来,如 <!ELEMENT 书(书名,作者,售价)> <!ELEMENT 书名(#PCDATA)>
如为元素类型,则直接书写 EMPTY:定义空元素 ANY:表示元素内容为任意类型
元素内容可以使用如下方式,描述内容的组成关系
1.用逗号分隔,表示内容的出现顺序必须和声明时一致 <!ELEMENT MYFILE(TITLE,AUTHOR,EMAIL)>
2.用|分隔,表示任选其一,即多个只能出现一个 <!ELEMENT MYFILE(TITLE|AUTHOR|EMAIL)>
在元素内容中也可以使用 + 、 * 、 ? 等符号表示元素出现的次数
+:一次或多次(书+)
?: 0次或一次(书?)
*: 0次或多次(书*)
(书):至少出现一次
也可以使用圆括号()批量设置,例:<!ELEMENT MYFILE((TITLE+,AUTHOR?,EMAIL*)|COMMENT)>
属性定义 attribute
xml文档中的标签属性需通过ATTLIST为其设置属性
语法格式:<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性明2 属性值类型 设置说明
...
>
例:<!ATTLIST 元素名 对应的XML文件
类别 CDATA #REQUIRED <商品 类别="服装" 颜色="黄色">...</商品>
颜色 CDATA #IMPLIED <商品 类别="服装">...</商品>
...
>
设置说明:#REQUIRED 必须设置该值
#IMPLIED 可选
#FIXED 默认值
属性值类型:CDATA:普通文本字符串
ENUMERATED 属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)
ID:属性的设置值为一个唯一值 ID属性的值只能由字母,下划线开始,不能出现空白字符
ENTITY(实体):用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了
引用实体:语法格式:<!ENTITY 实体名称 "实体内容"> :直接转变成实体内容
引用方式:&实体名称
举例:<!ENTITY copyright "i am a programmer">...
©right (等同于i am a programmer)
参数实体:参数实体被DTD文件自身使用
语法格式:<!ENTITY % 实体名称 "实体内容">
引用方式:%实体名称
举例:
<!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址">
<!ENTITY 个人信息 (%TAG_NAMES; | 生日)>
<!ENTITY 各户信息 (%TAG_NAMES; | 公司名)>
XML编程(CRUD) 增删改查 create read update delete
XML解析技术:两种方式dom和sax
1.dom(Document Object Model 文档对象模型)是W3C组织推荐的解析XML的一种方式
( 在内存中存储类似一个对象树的东西) 将XML文档变成一个Document对象,将每一个标签(节点)变成一个一个的ELEMENT对象,标签里面有文本,属性等对象
2.sax(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有XML解析器都支持它
从上往下读XML文件 读取一行就处理一行 所以无法进行增删改查 只能做读取
/*Dom和Sax解析方法的区别:*/
1.dom解析的优点是对文档crud比较方便,缺点是占用内存比较大
2.sax解析的优点是占用内存小,解析速度快,缺点是只适合做文档的读取,不适合作文档的crud
使用JAXP对XML文档进行DOM解析 对XML文档进行 CRUD操作
2.XML语言