xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西

1.XML语法

xml语法分为:

1.1 文档声明

  • 必须位于文档第一行,用来声明当前版本、编码格式以及standlane,如果没有编码格式,折则默认为utf-8,比如为<?xml version="1.0" encoding="UTF-8"?>

1.2 元素

  • 元素可以包含子元素,文本内容,或者元素属性.
  • 元素名称不能以数字、标点或者xml(包括任意大小写)开头,并且不能包含空格和冒号

比如包含demo文本内容的title元素 :<title>demo</title>

不包含文本的元素:<title></title>

1.3 元素属性

  • 一个元素可以有多个属性,每个属性都有它自己的名称name和取值value.
  • 属性值value必须是引号引起来的,并且属性名name不能重复

比如:<person name="张三">

1.4 注释

  • 在xml声明之前不能有注释
  • 注释语法为:<!—这是注释-->
  • 注释不能有嵌套,比如这样使用嵌套是出错的: <!—这是注释<!--在嵌套个注释-->-->
  • 在eclipse里可以通过ctrl+shift+/快捷键来快速打出注释

1.5 CDATA区

  • 位于CDATA 区段中的文本会被解析器忽略,不会去解析
  • CDATA内容不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
  • 标记 CDATA内容结尾的 "]]>" 不能包含空格或换行。
  • CDATA语法为:<![CDATA[   内容  ]]>

因为在XML元素中, 字符都会被解析器解析出来,像<>&" 这样的字符会被直接报错,示例如下图所示:

所以如果使用元素无法满足数据信息时,则可以通过CDATA来实现,CDATA一般用来存储函数方法,CSS.大量文本等,比如:

  1. <![CDATA[
  2. body {
  3. background: rgb(,,);
  4. }
  5. ]]>

1.6 转义字符

由于在XML元素中, 使用<>&" 这样的字符会被直接报错,除了通过CDATA区替代外,我们还可以通过转义字符来实现.

若要在元素中强制使用,需要转义的字符(包括;)有:

  • & :   "&amp; ",quotation mark的缩写
  • < :      "&lt; ",less-than的缩写
  • > :   "&gt; ", greater than的缩写
  • "  :  "&quot; ", quote的缩写
  • '  :   "&apos; ",apostrophe的缩写

示例如下:

2.XML约束

如果xml格式出现出错,则程序将不能正确获取文件内容,为了保证数据的规范性和安全性,所以可以编写一个约束文档来约束xml的书写规范,约束文档可以规范xml中出现的指定元素名称,属性以及出现的顺序.

常用的约束有两种:

  • DTD约束      :语法简洁,共能比较单一,如果是外部引用,则编码格式只能为utf-8编码,后缀名为.dtd
  • Schema约束:语法复杂,功能比较强大,后缀名为.xsd,他是新的xml文档约束,替代DTD的

3.DTD约束

DTD 可被声明于 XML 文档中,也可作为一个外部引用。

3.1 声明于 XML 文档

如果内部使用,则可以直接在文档声明下面写.格式为"<!DOCTYPE 根元素名称 [ 约束内容 ]>"

示例如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE persons [
  3. <!ELEMENT persons (person+)>
  4. <!ELEMENT person (年龄,性别,其它信息)>
  5. <!ELEMENT 年龄 (#PCDATA)>
  6. <!ELEMENT 性别 (#PCDATA)>
  7. <!ELEMENT 其它信息 (#PCDATA)>
  8. <!ATTLIST person
  9. 姓名 ID #REQUIRED
  10. 国籍 (中国|外国) #IMPLIED
  11. 特点 CDATA "吃睡学习"
  12. 动物级别 CDATA #FIXED "高级动物"
  13. >
  14. <!ENTITY zhangsanMsgUrl "person/id43645.com">
  15. ]>
  16.  
  17. <persons>
  18. <person 姓名="zhangsan" 国籍="中国" >
  19. <年龄>21</年龄>
  20. <性别>男</性别>
  21. <其它信息>zhangsanMsgUrl </其它信息>
  22. </person>
  23.  
  24. <person 姓名="lisi" 特点="吃喝玩乐" >
  25. <年龄>21</年龄>
  26. <性别>男</性别>
  27. <其它信息> person/id9945.com </其它信息>
  28. </person>
  29. </persons>

上面的示例,出现了!ELEMENT、!ATTLIST、#REQUIRED等等DTD约束的关键字,接下来我们便来看看这些关键字的作用

!ELEMENT-元素定义

ELEMENT关键字用来声明一个XML元素,语法:<!ELEMENT 元素名称  (使用规则)>

使用规则说明:

  • 以逗号,分开 : 表示该元素里的子元素必须按照顺序来写,所以上面示例的person内的子元素顺序为:年龄,性别,其它信息,如果没有逗号则表示该元素只能包含指定的子                         元素,比如"<!ELEMENT person (年龄)>"表示person元素里只能有"年龄"子元素
  • #PCDATA : 表示元素内容只能是文本,所以上面示例的年龄元素内只能是文本,不能包含子元素.
  • + :   表示子元素至少出现一次,所以上面persons里的person可以有多个.
  • ? :  表示子元素出现0次或1次
  • * :   表示子元素可有可无
  • EMPTY:  表示元素的主体为空
  • ANY:  表示元素的内容为任意类型
  • 以|分开 :  表示子元素任选其一

!ATTLIST-属性定义

ATTLIST关键字用来约束某个元素的属性信息语法:

  1. <!ATTLIST 元素名称
  2. 属性名 属性值类型 约束
  3. 属性名 属性值类型 约束
  4. ......
  5. >

属性值类型说明

  • ID:  表示属性的取值不能重复(不能与其它相同属性的值一致),不能只写数字
  • 以|分开 :  表示属性值任选其一,如果约束为#IMPLIED时,则可以忽略不用选
  • CDATA:表示属性值为文本字符串。

约束说明

  • #REQUIRED:  表示该属性必须出现
  • #IMPLIED:  表示该属性可有可无。
  • "字符串":     表示属性的取值为默认值。
  • #FIXED "字符串": 表示该属性的取值为一个固定字符串值

 

3.2 DTD作为外部引用

如果在xml中要使用外部文件的DTD约束,则需要在声明下面写入声明的根元素名以及DTD文件名,格式为"<!DOCTYPE 根元素名称  SYSTEM  "文件名称.dtd">"

示例,将3.1的内部使用改为外部引用 persons.xml文件如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. "<!DOCTYPE persons SYSTEM "persons.dtd">"
  3. <persons>
  4. <person 姓名="zhangsan" 国籍="中国" >
  5. <年龄>21</年龄>
  6. <性别>男</性别>
  7. <其它信息>zhangsanMsgUrl </其它信息>
  8. </person>
  9.  
  10. <person 姓名="lisi" 特点="吃喝玩乐" >
  11. <年龄>21</年龄>
  12. <性别>男</性别>
  13. <其它信息> person/id9945.com </其它信息>
  14. </person>
  15. </persons>

persons.dtd文件如下:

  1. <!ELEMENT persons (person+)>
  2. <!ELEMENT person (年龄,性别,其它信息)>
  3. <!ELEMENT 年龄 (#PCDATA)>
  4. <!ELEMENT 性别 (#PCDATA)>
  5. <!ELEMENT 其它信息 (#PCDATA)>
  6. <!ATTLIST person
  7. 姓名 ID #REQUIRED
  8. 国籍 (中国|外国) #IMPLIED
  9. 特点 CDATA "吃睡学习"
  10. 动物级别 CDATA #FIXED "高级动物"
  11. >
  12. <!ENTITY zhangsanMsgUrl "person/id43645.com">

4.Schema约束

  • XML Schema是基于 XML 的 DTD 替代者
  • XML Schema 符合XML语法结构,并且是可扩展的,后缀名为.xsd(xml schema document)
  • XML Schema更容易地描述允许的文档内容,以及约束定义, 并支持名称空间.

4.1 示例-创建personSchema.xsd

在eclipse中,点击File->new->other,然后创建XML Schema File文件,名字为personSchema.xsd.内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  3. xmlns="http://www.example.org/personSchema"
  4. targetNamespace="http://www.example.org/personSchema"
  5. elementFormDefault="qualified"> <!--讲解1-->
  6. <xs:element name='persons'> <!--约束xml根元素为persons-->
  7. <xs:complexType> <!--complexType:定义persons为复合元素-->
  8. <xs:sequence maxOccurs='unbounded '> <!--讲解2-->
  9. <xs:element name='person'> <!--约束persons下的子元素名字必须为person-->
  10. <xs:complexType>
  11. <xs:sequence> <!--sequence:必须按照顺序实现:先有姓名,最后年龄.-->
  12. <xs:element name='姓名' type='xs:string' />
  13. <xs:element name='性别' type='xs:string' />
  14. <xs:element name='年龄' type='xs:string' />
  15. </xs:sequence>
  16. </xs:complexType>
  17. </xs:element>
  18. </xs:sequence>
  19. </xs:complexType>
  20. </xs:element>
  21. </xs:schema>

讲解1:

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

xmlns=http://www.example.org/personSchema

targetNamespace="http://www.example.org/personSchema"

讲解2:

<xs:sequence maxOccurs='unbounded'>

  • sequence表示必须按照顺序实现, maxOccurs='unbounded'表示可以有多个相同的,比如上面就是表示persons里可以有多个person.

4.2 示例-创建对应的XML

然后在eclips中点击 File->new->other,然后创建XML文件,名字为person.xml,然后点击next,然后选择创建基于schema的XML:

再选择我们刚刚写好的personSchema.xsd:

然后设置文件名为person.xml,且内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <p:persons xmlns:p="http://www.example.org/personSchema"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.example.org/personSchema personSchema.xsd ">
  5. <p:person>
  6. <p:姓名>p:张三</p:姓名>
  7. <p:性别>p:男</p:性别>
  8. <p:年龄>p:22</p:年龄>
  9. </p:person>
  10. <p:person>
  11. <p:姓名>p:李四</p:姓名>
  12. <p:性别>p:男</p:性别>
  13. <p:年龄>p:17</p:年龄>
  14. </p:person>
  15. </p:persons>

xmlns:p="http://www.example.org/personSchema"

  • 表明此schema中使用的前缀为p:的元素和数据类型来自于"http://www.example.org/personSchema"名称空间

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

  • 指定定义的XML实例名称空间规范格式.默认都以这个2001版本为使用

xsi:schemaLocation="http://www.example.org/personSchema personSchema.xsd ">

  • 指定我们使用的"http://www.w3.org/2001/XMLSchema"名称空间的约束格式为personSchema.xsd约束文件的内容(也就是说该xml被personSchema.xsd所约束)

4.3 验证

如下图所示,假如我们不按照personSchema.xsd约束来写XML,则直接出现error:

未完待续,下章学习:

17.JAVA-Dom、Sax解析XML详解

16.XML语法、CDATA、约束(DTD、Schema)讲解的更多相关文章

  1. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  2. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  3. 【代码笔记】XML深入学习:DTD约束与DTD语法(1)

    2015-12-27 文件名    student.xml <?xml version="1.0" encoding="GB2312" standalon ...

  4. Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题

    Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题 1:说明 使用Eclipse 编写xml文件的约束文件的,包括DTD约束文件,Schema约束文件的时候, 我们也需要接受eclip ...

  5. JavaScripts学习日记——XML DTD Schema

    今日关键词: XML DTD Schema 1.XML 1 XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和 ...

  6. XML约束——DTD约束

    参考: 方立勋老师的讲课视频.   什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...

  7. XML Dtd Schema

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 整体比较: XML Schema符合XML语法结构. DOM.SAX等XML API很容易解析出XML Schem ...

  8. Xml一(基本语法和约束)、

    XML:eXtensible Markup Language 可扩展标记语言 version="1.0" * 可扩展:所有的标签都是自定义的. * 功能:数据存储 * 配置文件 * ...

  9. 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)

    什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...

随机推荐

  1. c++小游戏——彩票

    #include <cstdlib> #include <iostream> #include <cstdio> #include <cmath> #i ...

  2. Linux系统安装Tomcat——.tar.gz版(old)

    这里简单地阐述一下rpm.deb.tar.gz的区别. rpm格式的软件包适用于基于Red Hat发行版的系统,如Red Hat Linux.SUSE.Fedora. deb格式的软件包则是适用于基于 ...

  3. C# MATLAB混编(二)

    在上一篇博客中说到按照参考教程操作之后依然有两个问题. 问题1:当我在matlab中输入mbuild -setup后    报错 解:这是因为VS与Matlab存在版本匹配问题,理论上来说vs版本最好 ...

  4. PowerBI Desktop中如何能实现点击按钮跳转到相应报表页

    我看到过一个报表首页,它将其他报表业存为一种类似URL的方式,按住Ctrl点击鼠标右键即可跳到相应的报表业. 当时我理解成了是“分页报表”的功能实现的,弄明白后发现是由按钮+书签的方式是实现的. 实现 ...

  5. Docker volume speed up npm install

    上一节决定在Jenkins中采用Docker作为构建环境,于是就可以为所欲为的使用各种node版本编译我们的项目.解决了版本切换问题.然而,Docker设计的目的就是纯净的执行环境,因此每次运行doc ...

  6. 2019前端面试系列——Vue面试题

    Vue 双向绑定原理        mvvm 双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty()来劫持各个属性的 setter.getter,在数 ...

  7. java反射原理及Class应用

    反射:框架设计灵魂 框架:半成品软件,可以在框架基础上进行软件开发,简化编码 反射:将类的各个组成部分封装我其他对象,这就是反射机制 好处:  1.可以在程序运行过程中,操作这些对象  2.可以解耦, ...

  8. 【Java】Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no statement named *** in this SqlMap.

    如题: 可能原因: 在xxx.xml文件中有两个标签的id命名相同: DAO实现类方法中没有写对应xxx.xml的id名称: 实体映射文件xxx.xml未加入到sqlMap-Config.xml文件中 ...

  9. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

  10. 神奇的 SQL 之子查询,细节满满 !

    前言 开心一刻 有一天,麻雀遇见一只乌鸦. 麻雀问:你是啥子鸟哟 ? 乌鸦说:我是凤凰. 麻雀说:哪有你龟儿子这么黢黑的凤凰 ? 乌鸦说:你懂个铲铲,老子是烧锅炉的凤凰. 子查询 讲子查询之前,我们先 ...