一、xml:配置文件
1、xml概念:可扩展标记语言(eXtensible Markup Language)是一套定义语义标记规则的语言
-
A:HTML语言 超文本标记语言(HyperText Markup Language):用于万维网上的数据静态展示
- 普通文本:浏览器可以打开,仅仅展示数据内容
- 超文本:数据内容展示可以设置文本效果
- 标记:<> </>
- 标签:< a> < /a>
-
B:HTML缺点:
- HTML不能自定义标签,只能使用预定义标签(浏览器不一样,W3C支持的预定义标签不一样,即显示的效果不一样)
- HTML预定义标签本身不能描述数据
- HTML标记没有国际化
-
C:XML:可拓展的标记语言
- a.W3C组织在1998年推出了可扩展标记语言
- b.特点:
- XML可拓展标记语言,可自定义标签,描述数据,做配置文件< Student>< /Student>;<中文></中文>。
- XML类似HTML,在浏览器显示数据,展示文本效果,可以被CSS设计整体样式。
- XML的设计宗旨是保存数据,而非显示数据,侧重点是 数据描述 和 数据结构(数据传输需要一定的格式)。
- 有结构的保存数据(通过标签嵌套,设计数据存储结构)
- XML 标签没有被预定义,需要自定义(标签名需要自己定义:用来描述存储数据)。
- XML实现了国际化标准Internationalization(别名:I18N),统一的表现形式,因此是一种跨平台,跨语言的技术(用xml文件进行数据传输)。
- XML有结构的永久保存数据,很好的描述数据。
- c. XML用途:配置文件1.保存数据 2.描述数据(自定义标签标识数据)
- 描述业务数据,数学数据
- 实现了系统的解耦机制(例如:Web Service和JMS使用了XML,实现了系统不同模块的解耦),即当作了配置文件
- d. 优点:
- 实用性强:XML是以文本进行数据存储的,很容易修改和调试。
- 访问速度块:XML使用的层次结构,可以很方便,很快的获取对应的节点对应的数据。
- 可拓展性好:XML不仅可以存储数据和展示数据,还可以通过相关的属性标记数据的属性和类型,以便应用程序根据实际要求选择对应的数据。同时XML中的标记可以由使用着自己定义,很好的拓展性。
- 跨平台性好:XML具有同一标准的语法。
2、xml语法成分
-
A:标签要求:
-
XML有且只有一个根元素,必须要有根元素
-
根元素是包含其他所有元素的标签< root></ root>,其它所有标签都在根标签(开始标记和结束标记中间)里面
<root> <student></student> </root>
-
-
XML中的自定义标签要成对出现(开始标记-结束标记同时出现)
-
区分大小写,开始标记-结束标记中的标签名要保持一致
-
标签嵌套,每个标签的开始标记和开始标记都在同一层级中
-
-
B:XML标签中的属性
-
写在开始标签中:< student name=“tom”>< /student>
-
属性值必须加" "或者’ ';多个属性之间用空格分隔
-
属性和属性值通过 = 连接,属性必须要赋值
<root> <student name="tom" id="1" flag="true"> </student> </root>
-
-
C:XML的注释: ,不能注释特殊字符,快捷键:ctrl+shift+/;取消: Ctrl+shift+\
-
D:标签的文本域:< student> 文本域 < /student>
- 文本域中的空格,换行都作为数据内容被处理,中间的空格和换行都会被当做一个空格
- 一些封装好的解析方法中,是可以忽略掉空格和换行的(第三方jar包)
- 文本域中的空格,换行都作为数据内容被处理,中间的空格和换行都会被当做一个空格
-
E:XML指令< ? ? >:处理指令必须以 < ? 作为开头,以 ?> 作为结尾,XML文件的头部声明语句就是最常见的一种处理指令。
-
< ?xml version=“1.0” encoding=“UTF-8”? >:只是定义中文编码格式
- version:指定xml的版本
- encoding:指定编码格式 GBK GB2312 ISO-8859-1
- standalone="yes/no"代表该文件是否独立
- UTF-8:3个字节表示一个中文
- GBK:2个字节表示一个中文
- ISO-8859-1:1个字节表示一个中文
-
-
F:XML元素组成
- 开始标记和结束标记(空元素< student/>)
- 开始标记中的属性及属性值(属性值不可以出现特殊字符&,<,>)
- 文本域中的数据或者引用实体
- 数据:“tom”
- 引用实体:&name;(name为开始定义的实体)
- 子元素(子标签)或者是混合元素(数据+子元素)
-
G:标签命名规则
-
标签名:以字母或下划线开头;可以由数字、字母、连接符号(-)、
下划线(_),点(.),命名 -
区分大小写
-
不能包含空格,空格是用来分隔属性的
-
不能使用W3CShcool关键字
-
没有长度限制
<a></a> <_></_> <a_b></a_b> <a.c-b></a.c-b> <杰普.></杰普.>
-
-
H:良好结构的xml,符合以上语法要求
- 有效的Xml = 良好结构 + DTD约束
3、xml约束
-
A:XML内部约束创建实体:< !DOCTYPE root[ 约束 ]>对整个XML文件进行约束
-
标签文本域中存放数据或者引用实体
-
PCDATA(Parsed Character Data):XML中的内容被解析器解析
- < !ELEMENT 元素 (#PCDATA)> :这个元素不可以包含其他元素,但是可以有文本域
-
CDATA:(Character Data):写在文本域中,不被解析器解析,原样输出< ![CDATA [ 原样输出的数据 ]]
<!--内部约束DTD,约束整个XML文件--> <!DOCTYPE 根元素[ <!-- 可以创建多个实体--> <! ENTITY 实体名 "实体值"> ]> <!DOCTYPE root [ <!-- 定义一个实体 --> <!ENTITY name "tom"> <!ENTITY address "昆山浦软"> ]><!-- 对整个xml进行约束 --> <root> <!-- &实体名; 实体值 --> &address;--&name; <!-- “>”可以显示 “<”不可以显示 --> < <!-- 表示“<” --> > <!-- 表示“>” --> " <!-- 表示“ " ” --> <!-- 不可以使用 --> ' <!-- 表示“ ' ” --> & <!-- 表示“&” --> <!-- PCDATA模式所有的字节内容都可以被解析器解析 --> <!-- CDATA包裹的内容不会被解析器解析 --> <![CDATA[ < ]]> </root>
-
-
B:XML被CSS渲染
-
处理指令:简称PI (processing instruction),处理指令用来指挥 [解析引擎] 如何解析XML文档内容。
-
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,使用css文件显示xml文档内容。
<?xml-stylesheet type="text/css" href="css文件路径"?>
-
-
C:约束:
-
内部约束:< !DOCTYPE root [ 约束 ]>
-
元素约束:< !ELEMENT 元素 内容模式 >
<!-- 内部约束 --> <!DOCTYPE root [ <!-- <!ELEMENT 元素 内容模式> --> 1.内容模式:(#PCDATA)不能包含子元素,只能是为空或者是字符(包括空格和换行) <!-- <!ELEMENT root (#PCDATA)> --> 2.内容模式:EMPTY标签内为空,不能存在任何内容 <!-- <!ELEMENT root EMPTY> --> 3.内容模式:ANY ,可以有任何元素或者文本内容 <!-- <!ELEMENT root ANY> --> 4.内容模式:“,”必须按照顺序出现 <!-- <!ELEMENT root (a,b)> --> 5.内容模式:“|”两个元素出现其中一个 <!-- <!ELEMENT root (a|b)> --> 5.内容模式:?:0~1次 *:0~n次 +:1~n次 <!-- <!ELEMENT root ((a?,b*)|(b+,a))> --> 6.几种模式可以混合使用 <!-- <!ELEMENT root ((a,b)+|(b,a)?)*> --> ]> <root> <b></b> <a></a> </root>
-
元素属性约束:< !ATTLIST 标签名 (属性名 属性类型 属性默认值) + >:从中可以定义约束多个属性(+表示一个或者多个);< !ATTLIST 标签名 属性名 属性类型 属性默认值 >:单独定义一个属性约束
-
a、属性类型:
- ID:属性值必须唯一,属性值必须满足命名规则;
- (枚举1|枚举2|枚举3|…):属性值必须是枚举中的值;
- CDATA:属性值为字符
-
b、属性默认值:
-
#REQUIRED:属性声明必须出现在元素的开始标签中;
-
#IMPLIED:属性声明可有可无,不出现时候没有默认值;
-
“字符串值”:属性声明可有可无,不出现时候默认值为”字符串“;
-
#FIXED “字符串值”:属性声明可有可无,属性声明时的属性值必须为“字符串值”;
<!-- 内部约束 --> <!DOCTYPE root [ <!ELEMENT root (a,b,c)> <!-- <!ATTLIST 元素名 (属性名 属性类型 属性默认值)+ --> <!-- <!ATTLIST 元素名 属性名 属性类型 属性默认值> --> <!ATTLIST a name (李四|张三) #REQUIRED> <!ATTLIST a id ID #REQUIRED> <!ATTLIST b age CDATA #IMPLIED><!-- #IMPLIED不是必须出现 --> <!ATTLIST b class CDATA "JD1908"><!-- 没有值为默认值 --> <!ATTLIST b gender (男|女) "男"> <!ATTLIST c school CDATA #FIXED "大学"><!-- 属性值都必须默认是"大学" --> ]> <root> <a id="dfsftom123" name="李四"></a> <b class="JD1900" gender="男"></b> <c school="大学"></c> </root>
-
-
-
-
外部约束:外部约束出错时候,xml文件不会编译出错
- < !DOCTYPE 约束根标签 PUBLIC “公有id” “约束文件.dtd”>
- < !DOCTYPE root SYSTEM “test3.dtd”>
-
第一步:创建外部约束文件
-
第二部:引用外部约束文件约束当前XML文件
-
约束文件名还可以是https://约束文件.dtd;ftp://约束文件.dtd
<?xml version="1.0" encoding="UTF-8"?> <!-- <!DOCTYPE root SYSTEM "test3.dtd"> --> <!DOCTYPE root PUBLIC "id" "test3.dtd"> <root> </root>
-
-
-
DOCTYPE:关键字,一个xml文件只能有一个DOCTYPE