1、XML概述
1.1xml概念:xml本质上是一中数据存储的格式,可以在保存数据的同事保存数据之间的关系。Xml利用标签来保存数据的内容,利用标签之间的嵌套关系来保存数据之间的关系。
1.2xml运用场景
1.2.1数据传输:xml本质上是一段字符串,具有跨平台的特点,所有的开发语言、操作系统都支持,利用这样的特点可以用xml进行跨平台语言的数据传输。
1.2.2作为配置文件来使用:xml在保存数据内容的同时也可以保存数据之间的层级关系,利用这样的特点,xml常被用来作为配置文件使用。
1.3xml文件:将符合xml格式的数据写入到一个文件中去,那这样的文件就是一个xml文件,这样的文件通常都以.xml作为后缀名,请注意,不要将xml狭隘的理解成xml文件,xml除了文件形式还可以以其他的形式存在(内存中构建或网络中传输)。
1.4xml校验:浏览器除了内置html解析器外,还内置了xml解析器,利用这一点,我们可以使用浏览器对xml进行校验。如果xml符合规范,浏览器就可以正常打开,如果不符合规范则提示错误信息和错误行数。
2.xml语法
2.1文档声明:告诉解析器如何解析当前xml,是对当前xml一个声明,文档声明必须在xml的第一行出现,而且只能出现一次。一个不包含文档声明的xml成为格式不良好的xml,虽然很多的解析器都可以解析,但这是不符合规范的、有风险的,所以不建议这样做。
2.1.1<?xml version=”1.0“?>注意:所有的问好空格都必须是英文半角,version代表当前xml所遵循的规范,到目前为止都是1.0规范
2.1.2<?xml version="1.0" encoding="gb2312"?>encoding属性指定当前xml所使用的编码集,解析器将用该编码集去解码xml。xml文件如果保存使用的编码和encoding所指定的编码不同就会导致乱码问题,一定要注意。
2.1.3<?xml version="1.0" standalone="no"?>standalone属性声明当前文档是否是一个独立的文档,默认值为yes,如果该文档要依存于其他文档存在,则应该将此属性设置为no。很多的解析引擎并不会真的参考这个属性,但是标准就是标准,我们要按标准学习
2.2元素
一个标签就是一个xml元素。
2.2.1标签可以分文开始标签和结束标签,在开始标签和结束标签之间的文本称为标签体,如果一个标签既不包含标签体也不包含其他元素,可以将开始标签和结束标签进行合并,这样的标签就叫做自闭标签。
例子:<a>我是标签体</a> <a/>
2.2.2标签可以嵌套子标签,注意所有的嵌套都必须是合理嵌套。
2.2.3格式良好的xml必须包含且只能包含一个根标签。
2.2.4xml元素的命名规范:
区分大小写,例如,<P>和<p>是两个不同的标记。
不能以数字或"_" (下划线)开头。
不能以xml(或XML、或Xml 等)开头。
不能包含空格。
名称中间不能包含冒号(:)。
2.3属性
2.3.1一个xml元素可以包含多个属性,一个属性分为属性名和属性值,其中属性值应该用双引号或单引号给引起来。
2.3.2其实一个元素的属性可以转化为该元素的子标签,在表示的内容上是同效的。
例子<chinacaptital="beijing"/>
--->
<china>
<capital>
beijing
</capital>
</china>
2.3.3属性也要遵循和元素相同的命名规范。
2.4注释
<!--注释内容-->
2.4.1注视不能出现在文档声明之前。
2.4.2注视不能再嵌套注释
2.5CDATA区: 被CDATA区包含的内容将不会被解析器解析,而会当作文本来处理。
<![CDATA[
转义的内容
]]>
2.6转义字符
转义字符用来转义xml中特殊字符。
&--》 &
<--》<
>--》>
" --》"
' --》'
注意:CDATA区用来转义一段内容,转义字符只能用来转义单个字符。CDATA转义是通过通知处理器不要去解析其中的内容来实现的,本质传输的还是那个特殊字符。转义字符是将特殊字符用其他字符进行了替代,解析在看到转以后的字符后会用特殊字符去展现,其实他背后传输的是转义后的字符。
2.7处理指令
用来通知解析器以何种方式去解析xml
<?xml-stylesheettype="text/css" href="1.css" ?>
其实文档声明也是一种特殊的处理指令
多学一点:其实xml最初出现的目的就是替代html做网页用的,结果这个家伙太复杂了,对于做前台的开发的美工小mm们太过复杂,所以一直没推行开,反倒是做为配置文件和传输数据的时候用的多一点。
3.xml的约束技术
xml约束技术就是可以提供一个文档用来约束一个xml文档的写法。
市面上最常见的两种xml约束技术是DTD SChema,这两个技术都是标准,都由w3c组织负责发布。
3.1DTD
3.1.1如何在xml中引入DTD
(1)外部引入:dtd约束写在外部文件中,然后在xml中进行引入
<1>本地硬盘中的dtd文件的引入
<!DOCTYPE根元素的名称 SYSTEM"dtd文件路径">
例如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
<2>引入公共位置上的dtd
<!DOCTYPE根元素的名称 PUBLIC"DTD名称""DTD所在的URL">
例如:<!DOCTYPE web-app PUBLIC
"-//SunMicrosystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
(2)内部引入:dtd约束直接卸载xml文件中
例子:
<!DOCTYPE书架 [
<!ELEMENT书架 (书+)>
<!ELEMENT书 (书名,作者,售价)>
<!ELEMENT书名(#PCDATA)>
<!ELEMENT作者(#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
3.1.2如何约束xml元素
<!ELEMENT元素名称 元素约束>
元素约束:
(1)元素内容:元素内容必须用小括号引起来
<!ELEMENT书架 (.....)>
“,”: 如果括号内的内容用逗号进行分割的话,表明其中的内容必须按顺序出现。
“|”: 如果括号内的内容用竖线进行分割的话,表明其中的内容只能出现其中之一。
#PCDATA:表明该元素中只能写标签体
+:一次或多次 (书+)
?: 0次或一次 (书?)
*: 0次或多次 (书*)
利用括号还可以进行组操作,形成更复杂的元素约束
例子: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
(2)存放类型
EMPTY:表明当前元素不能再包含其他元素了
ANY:表明当前元素可以包含任意元素
3.1.3如何约束xml属性
<!ATTLIST元素名
属性名1 属性类型属性约束
属性名2 属性类型属性约束
……
>
(1)属性约束
#REQUIRED表明该属性是一个必须存在的属性
#IMPLIED表明该属性是一个可选的属性
#FIXED"固定值" 表明该属性必须取给定的固定值,如果强行设定成其他值dtd校验不通过,如果不给值解析器会默认将加上该属性,并设定为给定的值
"默认值" 如果该该属性没有指定,则取默认值,如果指定成其他则用指定的值
(2)属性类型
CDATA:表示属性值为普通文本字符串。
ENUMERATED枚举,属性的值只能取给定的值中的一个
例子: 类型 (科技|文学|教育) #REQUIRED
ID:表明此属性是一个标志性的属性,在整个xml文档中该属性的值不能重复出现。注意:ID的值不能以数字开头,不能出现空白字符
例子:书号 ID #REQUIRED
3.1.4ENTITY(实体)
实体:就是对一段内容的引用
实体分为引用实体和参数实体
(1)引用实体:这段引用是被用在xml文件中的
<!ENTITY实体名称 "实体内容">
引用的方式: &实体名称;
例子:<!ENTITY网址"www.itheima.cn">
<书 类型="科技" 书号="a111" 网址="&网址;">
(2)参数实体 用在DTD中的实体
<!ENTITY % 实体名称 "实体内容" >
引用参数实体:%实体名称;
分享到:
相关推荐
黑马程序员-JavaEE 57期-day14-ElasticStack学习之Elasticsearch进阶代码、讲义和资料
黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4 包含4天的教学文档
黑马程序员hibernate框架开发2016版视频day1-day4源码笔记
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490705
黑马12期 day73-EasyUI笔记,一个月前学的,整理不易
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
黑马程序员-SpringCloud-学习笔记01-认识微服务
2021贺岁大数据入门spark3.0入门到精通资源简介: 本课程中使用官方在2020年9月8日发布的Spark3.0系列最新稳定版:Spark3.0.1。共课程包含9个章节:Spark环境搭建,SparkCore,SparkStreaming,SparkSQL,...
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490901
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
传智博客-黑马-2017-Python就业班-完整版视频-附带课件和资料
自学Java的基本资料(资料来自黑马程序员免费提供),本人并无恶意,单纯分享。本资料对应黑马程序员Java从入门到起飞的上半部分的1-15天资料。希望能对你有帮助。如有侵权,请联系删除。
黑马day_01自己跟写笔记
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490903
1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 2.有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。 3.异步随机生成各种类型...
黑马程序员3天快速入门python机器学习
1.1、前微服务架构临的些挑战 1.2、技术架构演进 1.2.1、发展历史时间轴 1.2.2、单机型机时代 1.2.3、垂直拆分 1.2.4、集群化负载均衡架构
黑马程序员-JavaEE 57期-day15-房源数据抓取以及实现房源搜索
1. 看懂技术算的论(理论理) 2. 论和代码对应起来(代码) 3. 知常算的代码实现式(算实现)