加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML概述

发布时间:2020-12-16 00:27:41 所属栏目:百科 来源:网络整理
导读:前言 1.xml eXtensible markup language 可扩展标记语言 2.xml作用: a.交互数据; b.保存数据; c.配置文件 3.xml和html 1) html 超文本标记语言: a.数据展示和用户体验.; b.标记是固定的。 2) xml 可扩展标记语言; a.数据本身。 b.标记可扩展,可以自

前言

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的区别


HTML由W3C规范和定义 ;XML可由用户自定义; XML定义和规范了HTML

XML的优点


1.XML简化了数据的传输
2.XML简化了数据的共享
3.XML简化了平台的变更


XML的语法


文件的后缀.xml
<关键字>标签体</关键字>
关键字大小写敏感
<!--注释 -->

格式良好的XML文档


1.XML文档的第一行必须有声明
2.关键字不能以数字下划线开始,可以包涵数字下划线字母
3.关键字不能以XML/Xml/xml/开始
4.标签要合理嵌套
5.标签要成对出现,单标签要正确结束
6.属性要以键值对的形式出现,属性值要用""或者''引起来
7.有且仅有一对根标签

浏览器默认校验XML是否是格式良好的


有效的XML = 格式良好的XML+DTD/Schema语法校验


DTD(Document type Definition,文档类型定义)


定义XML的语法规范


XML文档定义引入DTD


1.内部DTD(定义声明在XML文档内部)
2.外部DTD(定义声明DTD在XML文档的外部)
DTD文件的后缀名.dtd

内部定义:
<!DOCTYPE 根标签 [DTD语法]>
外部DTD引入
<!DOCTYPE 根标签 SYSTEM "DTD文件的路径">

注: 使用XMLSPY软件来校验XML的有效性

DTD 定义元素


<!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 '中国' >


实体


&nbsp; &lt; &gt; &copy; &quot;


自定义实体


在外部DTD中<!ENTITY 实体名称 '实体表示内容' >
在XML中 &实体名称;


Schema


是xml中一种用来定义约束XML文档结构的语法规范


DTD的不足


1.数据类型有限
2.不可扩展
3.不支持命名空间
4.DTD的语法与XML的语法形式不同

Schema的语法


schema 文档后缀 .xsd


书写一个schema文件

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类型



1.简单类型对值进行约束

<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属性值



2.简单类型中的列表类型


<!--设置列表类型
<xs:list itemType="xs:int"></xs:list>
-->


3.简单类型中的联合类型



<!--联合类型 同时引用多个简单类型 实现取值多样化,简单类型名称之间以空格隔开-->


<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>


复杂数据类型


1.定义子元素的出现先后顺序


<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>


2.子元素间没有顺序


<!--定义多个 子元素没有先后顺序-->
<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>



3.多者选其一


<!--定义多个子元素中取其一-->
<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>


4.定义属性


<!--定义属性-->
<xs:complexType name="com4">
<xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
use属性 :optional 属性是可选的
required 必须的
prohibited 属性禁止设置

fixed : 设置属性固定值
default:设置属性的默认值
</xs:complexType>

5.设置子元素同时还有属性


<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>


6.设置父元素中含有子元素同时含有文本


通过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>

7.通过simpleContent 约束复杂类型的内容的形式


<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>



8.创建元素组

9.创建属性组

dtd代码示例:

1.struts.xml配置文件

2.struts.dtd是针对struts.xml配置文件写的约束

schema代码示例:

1.classXml.xml 测试schema的配置文件

2.classSchema.xsd

总结

元素


1. 开始标记和结束标记以及标记之间内容.
2.xml文件是一个树状结构,元素有一个"根部",然后 在扩展"枝叶".
3. xml文件是包括一个单一元素中,这个元素我们称之为 "根元素"。根元素是必须的。
4. 元素的规则: 元素大小写敏感。 元素要正确嵌套。 元素要关闭。 空元素:标记之间没有内容。称之为空元素. 可以简写<desc/>


实体引用


> &gt; < &lt; & &amp; " &quot; ' &apos;

属性


属性要使用引号括起来。 可以是双引号或者单引号都可以,但是要保持一致。


CDATA类型数据(特殊标签)


实体引用都会被忽略,把整个数据当作一块文本数据来看待。 格式<! [CDATA[文本数据]]>


注释


<!--注释的内容-->


11."格式良好"的xml
遵守正确语法的xml文件被称为"格式良好"的xml。


需要遵守的规则: a.xml文件必须要有根元素。 b.xml文件的标记必须正确关闭。 c.xml文件标记大小写敏感。 d.xml文件属性要有引号括起来。 e.xml文件标记必须要正确嵌套。



DTD


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


Schema 和DTD 都是用来描述XML文件结构。DTD无法解决名称冲突的问题, 所以Schema出现了,支持命名空间(解决不同来源的DTD标记相同的问题)。
Schema使用的是XML语法(自身就是XML),xml也称作自描述语言。 Schema文件的扩展xsd. Schema名词: 复杂元素(有子元素的元素) 简单元素(叶子元素)

java API解析XML文件


解析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(属性名称,属性值);//添加属性

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读