1.xml eXtensible markup language 可扩展标记语言
2.xml作用: a.交互数据; b.保存数据; c.配置文件
3.xml和html
1) html 超文本标记语言: a.数据展示和用户体验.; b.标记是固定的。
2) xml 可扩展标记语言; a.数据本身。 b.标记可扩展,可以自定义。
4.xml解析 1.xml解析器 2.浏览器 3.myeclipse
5.xml 文件的声明
<?xml version="1.0" encoding="GBK" ?> version:文件版本号 encoding:文件编码格式
XML(Extensible Markup Language,可扩展标记语言) 一种用来存储和传输数据的元语言( 元语言:一种定义了与其他特定领域有关的,结构化的,语义化的语法语言).
HTML由W3C规范和定义 ;XML可由用户自定义; XML定义和规范了HTML
1.XML简化了数据的传输
2.XML简化了数据的共享
3.XML简化了平台的变更
文件的后缀.xml
<关键字>标签体</关键字>
关键字大小写敏感
<!--注释 -->
1.XML文档的第一行必须有声明
2.关键字不能以数字下划线开始,可以包涵数字下划线字母
3.关键字不能以XML/Xml/xml/开始
4.标签要合理嵌套
5.标签要成对出现,单标签要正确结束
6.属性要以键值对的形式出现,属性值要用""或者‘‘引起来
7.有且仅有一对根标签
浏览器默认校验XML是否是格式良好的
有效的XML = 格式良好的XML+DTD/Schema语法校验
定义XML的语法规范
1.内部DTD(定义声明在XML文档内部)
2.外部DTD(定义声明DTD在XML文档的外部)
DTD文件的后缀名.dtd
内部定义:
<!DOCTYPE 根标签 [DTD语法]>
外部DTD引入
<!DOCTYPE 根标签 SYSTEM "DTD文件的路径">
注: 使用XMLSPY软件来校验XML的有效性
<!ELEMENT 元素名称 (元素类型)>
#PCDATA 所有字符数据
ANY 表示任何数据
EMPTY 不能含有任何内容
<!ELEMENT book (title)> 只含有一个子元素的纯元素
<!ELEMENT book (title,author)> 多个子元素有出现的先后顺序用逗号分隔
<!ELEMENT book (title|author)> 多个用|分隔 只能取其一 相当于or
<!ELEMENT book (title+,author)> +表示元素可出现至少一次
<!ELEMENT book (title?,author)> ?表示0次或者一次
<!ELEMENT book (title*,author)> * 表示任意次数
<!ELEMENT book (title*,(author1|author))>
<!ELEMENT firstname (#PCDATA|author)*> 元素中可以包含子元素和文本的混合
<!ELEMENT firstname (#PCDATA|author|author1)*>
<!ATTLIST 元素名称 属性名称 属性值的类型 属性特性>
1. 属性值类型
CDATA 所有字符数据
NMTOKEN(name token) 是CDATA的子集 不能包涵"<"">" ,不能包含空格
NMTOKENS 是CDATA的子集,不能包涵"<"">" 能包含空格
ID 属性值为当前标签的唯一标识,不能是纯数字,不能以数字开始
IDREF 属性值只能是其他ID类型的值
IDREFS 属性值同时引用多个ID类型的值,多个值之间用空格隔开
2. 属性特点
#REQUIRED 必须出现
<!ATTLIST title name CDATA ‘hello‘ > 设置属性不出现并且设置默认值
#IMPLIED 可选的
#FIXED 固定值
3.例子: <!ATTLIST title name CDATA #FIXED ‘中国‘ >
< > © "
在外部DTD中<!ENTITY 实体名称 ‘实体表示内容‘ >
在XML中 &实体名称;
是xml中一种用来定义约束XML文档结构的语法规范
1.数据类型有限
2.不可扩展
3.不支持命名空间
4.DTD的语法与XML的语法形式不同
schema 文档后缀 .xsd
xml声明
<?xml version="1.0" encoding="utf-8"?>
书写schema的根标签
<xs:schema
定义一个命名空间的别名(别名xs 别名所代表的命名
http://www.w3.org/2001/XMLSchema )
xmlns:xs="http://www.w3.org/2001/XMLSchema"
定义当前文档的命名空间
xmlns="guopeihaoren"
目标XML文档引用的命名空间
targetNamespace="guopeihaoren"
当前定义的元素是否纳入当前命名空间的规范
elementFormDefault="qualified"
当前定义的属性是否纳入命名空间的规范
attributeFormDefault="unqualified"
值:qualified 纳入命名空间的规范
unqualified 不纳入命名空间的规范
>
定义一个元素
<xs:element name="class" type="xs:int"></xs:element>
</xs:schema>
书写目标XML文件
XML声明
<?xml version="1.0" encoding="utf-8"?>
书写XML根标签
<my:class
根标签的引用命名空间
xmlns:my="guopeihaoren"
定义命名空间xsi的命名空间值
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
定义当前XML文档所引用的schema文件的路径:命名空间 schema文件名
xsi:schemaLocation="guopeihaoren classSchema.xsd"
>123</my:class>
定义元素
<xs:element></xs:element>
属性:name 定义标签名称
type 定义元素体的取值类型
maxOccurs 当前元素在父标签中的最大出现次数
minOccurs 当前元素在父标签中最小出现的次数
default 设置元素的默认值
fixed 设置元素的固定取值
属性type取值: 基本数据类型、简单数据类型、复杂数据类型
xs:string xs:int xs:boolean xs:double xs:date xs:time
xs:decimal 任意精度类型
<xs:simpleType name=""></xs:simpleType>
<xs:element name="class" >
<xs:simpleType >
<xs:restriction base="xs:int">
<xs:maxExclusive value="100"></xs:maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
嵌入式:元素不能设置type属性
simpleType 不能设置name 属性
<xs:element name="class" type="testSimple"></xs:element>
simpleType name 属性:标识当前simpleType类型
<xs:simpleType name="testSimple">
规范简单类型的取值的约束 base属性:简单类型取的基本类型的值
<xs:restriction base="xs:decimal">
<!--设置取值的上限不包含边界
<xs:maxExclusive value="100"></xs:maxExclusive>
设置取值的下限不包含边界
<xs:minExclusive value="90"></xs:minExclusive>
设置取值的上限包含边界
<xs:maxInclusive value="100"></xs:maxInclusive>
设置取值的下限包含边界
<xs:minInclusive value="90"></xs:minInclusive>
设置数字类型的最大位数
<xs:totalDigits value="3"></xs:totalDigits>
设置小数点后的小数最大位数,注意只能在xs:decimal这种类型下设置
<xs:fractionDigits value="3"></xs:fractionDigits>
设置字符串的精准长度
<xs:length value="4"></xs:length>
设置字符串的最大长度
<xs:maxLength value="5"></xs:maxLength>
设置字符串的最小长度
<xs:minLength value="3"></xs:minLength>
多个取其一
<xs:enumeration value="big"></xs:enumeration>
<xs:enumeration value="middle"></xs:enumeration>
<xs:enumeration value="small"></xs:enumeration>
采用正则表达式校验
<xs:pattern value="(13|14|15|18)\d{9}"></xs:pattern>
对于空白字符的处理方式
<xs:whiteSpace value="collapse"></xs:whiteSpace>
-->
</xs:restriction>
</xs:simpleType>
元素的type属性设置成simpleType 的name属性值
<!--设置列表类型
<xs:list itemType="xs:int"></xs:list>
-->
<xs:element name="class" type="testSimple"></xs:element>
<xs:simpleType name="testSimple">
<xs:union memberTypes="str digital"></xs:union>
</xs:simpleType>
<xs:simpleType name="str">
<xs:restriction base="xs:string">
<xs:enumeration value="china"></xs:enumeration>
<xs:enumeration value="usa"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="digital">
<xs:restriction base="xs:int">
<xs:pattern value="\d{3}"></xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="com1">
定义子元素出现的先后顺序
<xs:sequence maxOccurs="unbounded" minOccurs="1">
子元素在父元素中出现的次数
(要以一个整体形式出现 )
<xs:element name="student1" type="str"></xs:element>
<xs:element name="student2" type="digital"></xs:element>
</xs:sequence>
</xs:complexType>
<!--定义多个 子元素没有先后顺序-->
<xs:complexType name="com2">
<xs:all >
<xs:element name="student1" type="str"></xs:element>
<xs:element name="student2" type="digital"></xs:element>
</xs:all>
</xs:complexType>
<!--定义多个子元素中取其一-->
<xs:complexType name="com3">
<xs:choice >
<xs:element name="student1" type="str"></xs:element>
<xs:element name="student2" type="digital"></xs:element>
</xs:choice>
</xs:complexType>
<!--定义属性-->
<xs:complexType name="com4">
<xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
use属性 :optional 属性是可选的
required 必须的
prohibited 属性禁止设置
fixed : 设置属性固定值
default:设置属性的默认值
</xs:complexType>
<xs:complexType name="com2">
<xs:all >
<xs:element name="student1" type="str"></xs:element>
<xs:element name="student2" type="digital"></xs:element>
</xs:all>
<xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
</xs:complexType>
通过mixed="true"属性设置混合
<xs:complexType name="com2" mixed="true">
<xs:all >
<xs:element name="student1" type="str"></xs:element>
<xs:element name="student2" type="digital"></xs:element>
</xs:all>
<xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
</xs:complexType>
<xs:complexType name="com5">
<xs:simpleContent>
base属性设置元素的内容类型
<xs:extension base="str">
<xs:attribute name="name" type="digital" use="required"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="com5">
<xs:simpleContent>
base属性设置元素的内容类型
<xs:restriction base="">
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
1. struts.xml配置文件
1.classXml.xml 测试schema的配置文件
2.classSchema.xsd
1. 开始标记和结束标记以及标记之间内容.
2.xml文件是一个树状结构,元素有一个"根部",然后 在扩展"枝叶".
3. xml文件是包括一个单一元素中,这个元素我们称之为 "根元素"。根元素是必须的。
4. 元素的规则: 元素大小写敏感。 元素要正确嵌套。 元素要关闭。 空元素:标记之间没有内容。称之为空元素. 可以简写<desc/>
> > < < & & " " ‘ '
属性要使用引号括起来。 可以是双引号或者单引号都可以,但是要保持一致。
实体引用都会被忽略,把整个数据当作一块文本数据来看待。 格式<! [CDATA[文本数据]]>
<!--注释的内容-->
11."格式良好"的xml
遵守正确语法的xml文件被称为"格式良好"的xml。
需要遵守的规则: a.xml文件必须要有根元素。 b.xml文件的标记必须正确关闭。 c.xml文件标记大小写敏感。 d.xml文件属性要有引号括起来。 e.xml文件标记必须要正确嵌套。
Document Type Definition 文档定义类型 定义xml文件结构,和xml文件标记的规则。 DTD文件可以定义在XML文件中,也可以定义在XML文件外部
1. DTD类型:
PUBLIC(行业公用的) SYSTEM(小范围自定义的)
2. DTD中定义规则
*表示出现0-n次 #PCDATA表示字符串 +表示出现1-n次 |表示或者(phone|mobile) 只能出现一个 ?表示出现0-1次
ATTLIST 标记名称 属性名 类型
标记名称 id CDATA #REQUIRED 表示属性是必须的
标记名称 id CDATA #IMPLIED 表示属性不是必须的
标记名称 hot CDATA "false" 表示hot的默认值是false 如果定义了
值就取定义的值,如果没有定义 就取默认值 false
Schema 和DTD 都是用来描述XML文件结构。DTD无法解决名称冲突的问题, 所以Schema出现了,支持命名空间(解决不同来源的DTD标记相同的问题)。
Schema使用的是XML语法(自身就是XML),xml也称作自描述语言。 Schema文件的扩展xsd. Schema名词: 复杂元素(有子元素的元素) 简单元素(叶子元素)
解析xml方式:
a.DOM (Document Object Model)
优点:把xml文件放到内存中为一个树状结构,可以遍历和修改节点。
缺点:当文件比较大的时候,内存压力比较大,读写速度慢。
b.SAX(Simple API for XML)
把xml文件做为一个流,当触发标记开始、标记内容开始、标记结束这些动作。
优点:可以马上开始,速度快,没有内存压力
缺点:不能修改节点
JDOM/DOM4J 这是目前市场上比较流行的两种方式
DOM4J 结合了DOM和SAX两种解析方式的优点。
DOM4J API写 XML文件
常用API方法:
addElement(节点名称);//添加元素
setText(字符串);//给元素添加值
addAttribute(属性名称,属性值);//添加属性
原文:http://blog.csdn.net/z929118967/article/details/25873611