首页 > 代码库 > xml规范及xml解析
xml规范及xml解析
http://www.cnblogs.com/wang-meng/p/5374498.html
1,XML基础介绍
xml的概念:
XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML。
它的设计宗旨是传输数据,而非显示数据它;标签没有被预定义,需要自行定义标签。
xml的作用:
XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。简单的说,我们在开发中使用XML主要有以下两方面应用.
a.XML做为数据交换的载体,用于数据的存储与传输
b.XML做为配置文件
2,书写规范
注意事项:
xml必须有根元素(只有一个) xml标签必须有关闭标签 xml标签对大小写敏感 xml的属性值须加引号 特殊字符必须转义 xml中的标签名不能有空格,不能以数字或"_" (下划线)开头, 不能以xml(或XML、或Xml 等)开头,名称中间不能包含冒号(:) (有特殊用途) 空格/回车/制表符在xml中都是文本节点 xml必须正确地嵌套
3.xml的约束
xml的约束: 作用:明确的告诉我们那些元素和属性可以写,以及他们的顺序如何. 分类:DTD约束和SCHEMA约束 要求:给你xml约束你可以写出对应的xml文档即可. 1, DTD约束:struts hibernate中有使用 与xml文档的关联:
方式1:内部关联 格式:<!DOCTYPE 根元素名称 [dtd的语法]> 方式2:外部关联--系统关联 格式:<!DOCTYPE 根元素名称 SYSTEM "dtd路径"> dtd的后缀名是 .dtd 方式3:外部关联--公共关联 格式:<!DOCTYPE 根元素名称 PUBLIC "dtd的名称" "dtd路径"> 元素: 格式1:<!ELEMENT 元素的名称 (内容)> 格式2:<!ELEMENT 元素的名称 类别> 属性: 格式:<!ATTLIST 元素的名称 属性的名称 类型 默认值> 属性的类型: ID:唯一 CDATA:文本 默认值: REQUIRED:必须出现 IMPLIED:可以选择 类别: #PCDATA:文本是一个字符串,不能出现子元素 ,用的时候用(#PCDATA) 符号: + >=1 ? 0|1 * 任意值 | 选择 () 分组 , 顺序
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE bookstore[ <!ELEMENT bookstore (book+)> <!ELEMENT book (title,author,year,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST book category CDATA #REQUIRED> <!ATTLIST title lang CDATA #IMPLIED>]><bookstore> <book category="COOKING" > <title lang="en" >Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book></bookstore>
2,SCHEMA约束:spring中使用的就是schema约束
作用:用来替代dtd的,多个schema可以出现一个xml文档上
需求:
xml 文档中出现了<table>
a约束上的---table :桌子 属性 height width
b约束上的---table :表格 属性 rows cols
名称空间:
作用:用来确定标签的约束来自于那个约束文档上
格式:
方式1:xmlns="名称"
方式2:xmlns:别名="名称"
例如:
table 代表的是桌子
b:table 代表的就是表格
schema的语法:
后缀名.xsd
关联
1.约束文件的关联 bookstore.xsd xmlns="http://www.w3.org/2001/XMLSchema"-- 固定值,自定义的约束文件可以出现那些标签 targetNamespace="http://www.example.org/bookstore" 给当前的xsd起个名称空间,方便目标xml文件引用,名字可以随便起,一般使用域名/自定义名称既可以 例如: targetNamespace="bookstore" targetNamespace="http://www.augmentum.com/bookstore" 确定一个目标xml根元素 <element name="bookstore"></element> 2.xml文件的关联 写根标签 添加schema约束 1.xmlns="约束的名称空间" -- 值为xsd文件上的targetNamespace的内容 例如: xmlns=="http://www.augmentum.com/bookstore" 2.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" :固定的写法 声明此文档是一个 被schema约束的文件 3.确定文档的位置 xsi:schemaLocation="{和xsd文件中的targetNamespace} {xsd文件的路径}" 关联小结: 先有约束文件. .xsd targetNamespace 就是给当前的约束文件起个名字,方便xml使用 必须确定根元素 后有xml文件. 写根元素 添加约束 xmlns="名字" 他的值为targetNamespace中起的名称 xsi:schemaLocation="名字 位置" 语法: 1.确定根元素 <element name > name:元素的名称 type:元素的数据类型 2.确定元素类型 复杂的元素 <complexType> 简单的元素 -- 几乎看不见 <simpleType> 3.确定顺序: <sequence maxOccurs="3"> 按次序 相当于 dtd 中, <all> 随意 <choice> 或 相当于dtd中的 | maxOccurs 最大的出现次数 值为unbounded指的是无上限 minOccurs 最小的出现次数 4.确定属性 <attribute name="category" type="string" use="required" /> name :属性的名称 type:属性的数据类型 use 相当于dtd中 默认值 值为required:必须出现 值为optional:可选 5.若有属性的元素,内容只是文本 <complexType> --- 指定元素为复杂类型 <simpleContent>--- 指定元素是一个简单的内容,只有文本 <extension base="string"> -- 文本内容进行扩展 <attribute name="lang" type="string" /> -- 添加属性 </extension> </simpleContent> </complexType>
Schema约束示例:
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="aaa" xmlns:tns="http://www.example.org/bookstore" elementFormDefault="qualified"> <element name="bookstore" > <!-- 1.确定根元素 <element name > name:元素的名称 type:元素的数据类型 2.确定元素类型 复杂的元素 <complexType> 简单的元素 -- 几乎看不见 <simpleType> 3.确定顺序: <sequence maxOccurs="3"> 按次序 相当于 dtd 中, <all> 随意 <choice> 或 相当于dtd中的 | maxOccurs 最大的出现次数 值为unbounded指的是无上限 minOccurs 最小的出现次数 4.确定属性 <attribute name="category" type="string" use="required" /> name :属性的名称 type:属性的数据类型 use 相当于dtd中 默认值 值为required:必须出现 值为optional:可选 --> <complexType> <sequence maxOccurs="unbounded" minOccurs="1"> <element name="book"> <complexType> <sequence> <element name="title"> </element> <element name="author" type="string" /> <element name="year" type="date" /> <element name="price" type="double" /> </sequence> <attribute name="category" type="string" use="optional" /> </complexType> </element> </sequence> </complexType> </element></schema>bookstore.xsd
<?xml version="1.0" encoding="UTF-8"?><bookstore xmlns="aaa"xsi:schemaLocation="aaa bookstore.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></bookstore>
4.解析xml
解析xml种类:
解析xml文件,解析xml格式的字符串
获取xml中的内容
解析方式:SAX ,DOM4J ,JDOM
区别:
sax:逐行的解析,不能增删改
dom:把整个文档加载到内存中,翻译成一棵树,就可以进行crud操作
JDOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 JDOM
如果不考虑可移植性,那就采用DOM4J吧!
要求:
会查询(获取)
DOM4J的解析(只需会查询操作)
xml规范及xml解析