XML 可拓展标记语言
XML 简介
a) xml, eXtensible Markup Language, 可拓展标记语言.是一种标记语言.
b) xml是一种非常灵活的语言, 没有固定的标签, 所有的标签都可以自定义.
c) 通常,xml被用于信息的记录和传递. 因此xml经常用于充当配置文件
XML格式
a) 声明信息 ,用于描述XML的版本,编码方式.
版本始终是1.0 编码一般选utf-8
<?xml version="1.0" encoding="UTF-8"?>
b) 根元素 (一对标签)
根元素有且仅有一个
c) xml是大小写敏感的
d) 标签是成对的,而且要正确嵌套
e) 属性值要使用双引号
下面id就是属性,""里面是属性值
<?xml version="1.0" encoding="utf-8"?>
<a>
<aa id="101">
xxx
</aa>
</a>
f) 注释写法
<!-- 这里是注释-->
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<name>
xml101
</name>
<author>
张三
</author>
<price>
50.5
</price>
</book>
<book>
<name>
xml102
</name>
<author>
李四
</author>
<price>
40.4
</price>
</book>
</books>
<!-- 这里是注释-->
可以直接用浏览器打开
还可以折叠
DTD
DTD 简介
a) DTD , Document Type Definition,文档类型定义
b) DTD 用于约束xml的文档格式,保证xml是一个有效的xml.
c) DTD 可以分为两种,内部DTD,外部DTD.
DTD内部声明
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>
元素声明语法 :
数量词
+
: 出现一次或多次
?
: 出现0次或一次
*
: 出现任意次
属性声明语法
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE scores[
<!ELEMENT scores (student*)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
<!ELEMENT name (#PCDATA)>
]>
<scores>
<student id="1">
<name>
张三
</name>
<course>
数学
</course>
<score>
75
</score>
</student>
<student id="2">
<name>
李四
</name>
<course>
数学
</course>
<score>
88
</score>
</student>
</scores>
外部的DTD声明
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:
要创建一个单独的dtd文档 1.dtd
<?xml version="1.0" encoding="utf-8" ?>
<!ELEMENT scores (student*)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
<!ELEMENT name (#PCDATA)>
然后引入
<?xml version="1.0" encoding="utf-8" ?>
<!-- 引入外部DTD文件-->
<!DOCTYPE scores SYSTEM "1.dtd">
<scores>
<student id="1">
<name>
张三
</name>
<course>
数学
</course>
<score>
75
</score>
</student>
<student id="2">
<name>
李四
</name>
<course>
数学
</course>
<score>
88
</score>
</student>
</scores>
DTD实体
参考 https://blog.csdn.net/Liuqz2009/article/details/51848912
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
实体格式如下: 以下是代码片段:
实体又分两类:
1,一般实体(格式:&实体引用名;)
2,参数实体(格式:%实体引用名;)
一般实体,可以在XML文档中的任何位置出现的实体称为一般实体。实体可以声明为内部实体还是外部实体。
外部实体分SYSYTEM及PUBLIC两种。SYSYTEM引用本地计算机,PUBLIC引用公共计算机,
外部实体格式如下:
管理实体引用的规则包括:
引用实体前,必须先在XML文档中声明该实体。
实体引用不应含有任空空格。例如:& title; &title;都是不对的。
实体引用的XML文件必须是格式良好的。
一个内部实体声明
语法:
<!ENTITY 实体名称 "实体的值">
例子:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ENTITY x "First">
<!ENTITY y "Second">
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]>
<root>
<x>&x; </x>
<y>&y; </y>
<author>&writer;©right;</author>
</root>
一个外部实体声明
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">
例子:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ENTITY test SYSTEM "test.xml">
]>
<root>&test;</root>
外部参数实体:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ENTITY % param1 "hello">
<!ENTITY % param2 "woeld">
<!ENTITY % dtd SYSTEM "./1.dtd">
%dtd;
]>
<root> content "%param1;%param2;"</root>