.xml外部实体引用

一、语法
XML声明:
XML声明放在XML文档的第一行
XML声明由以下几个部分组成:
version:文档符合xml1.0规范,我们学习1.0
encoding:文档字符编码,比如“GB2312”或者“UTF-8”
standalone:文档定义是否独立使用“no”为默认值表示不独立(允许使用外部声明
),yes表示独立使用(不允许使用外部声明)

<?sml version="1.0" ?>
这个就是xml的声明,声明也是处理指令,在xml中,所有的处理指令都以<?开始
,?>结束。<?后面紧跟着的是处理指令的名称。xml处理指令要求指定一个version属性。
并允许指定可选的standalone和encoding

规则:
(1)每个xml文档必须有且只有一个根元素
(2)在xml中,空格和换行都作为原始内容被处理,所以要小心
(3)命名规范:
区分大小写,P和p是两个不同的元素
不能以数字或下划线“_”开头
元素内不能包含空格
名称中间不能包含冒号(:)
XML有5个预定义的实体字符
&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 双引号
注释:
以!--开始--结束
<!--这是一个注释-->


xml组成:
<?xml version="1.0" encoding="utf-8" ?>
<元素 属性=“属性值”>标签体</元素>


二、ΧΜL引用DTD文件两种情况:

1.内部dtd将standalone设为真。

<?xml version="1.0" standalone="yes"?>     

<!DOCTYPE root [      

  <!ELEMENT root EMPTY>     

]>  

2.外部dtd将standalone设置为假

<?xml version="1.0" standalone="no"?>     

<!DOCTYPE root SYSTEM "http://www.test.org/test.dtd"> 

引用DTD文件和xml一起使用,目的是对xml格式的约束:如下引用内部DTD


.xml外部实体引用

编写DTD来约束xml如:

  1. <!ELEMENT root EMPTY> //EMPTY关键字表示元素是个空元素  
  2.     <!ELEMENT root ANY> //ANY关键字表示元素中可以出现任何内容,也可以为空  
  3.     //下面这个声明表示root中可以有文本,也可以是空  
  4.     <!ELEMENT root (#PCDATA)> //()表示一个分组,其中是放的允许在元素出现的内容,#PCDATA表示文本  
  5.     <!ELEMENT root (child)> //child是子元素的名称,这个声明表示root中必须且只能有一个child元素  
  6.     <!ELEMENT root (child1,child2)> //以逗号分隔,表示子元素依次出现  
  7.     <!ELEMENT root (child1|child2)> //竖线与"OR"的意思相近,表示root元素中只能出现child1或child2  
  8.     <!ELEMENT root (child?)> //root中child子元素可以出现一次,也可以不出现  
  9.     <!ELEMENT root (child+)> //root中child子元素至少出现一次  
  10.     <!ELEMENT root (child*)> //root中child子元素可以出现任意次数或不出现  
  11.     <!ELEMENT root (child,(a,b))> //()还可以嵌套,这里表示root元素中第一次子元素必须是child  
  12.     //紧接着是a或b  
  13.     <!ELEMENT root (child,(a,b)+)> //*,?,+这些量词可作用于分组,这里表示root元素中第一次子元素必须是child  
  14.     //紧接着是a或b出现一次或多次  


三、xml引用实体格式如下:
<!ENTITY 实体引用名 “引用内容”>
实体分两类:
1.一般实体(格式:&实体引用名)
2.参数实体(格式:%实体引用名)
一般实体,可以在XML文档中的任何位置出现的实体称为一般实体。实体可以声明为内部
实体还是外部实体。外部实体分SYSTEM和PUBLIC两种。
SYSTEM引用本地计算机,PUBLIC引用公共计算机,外部实体格式如下:
<!ENTITY 引用名 SYSTEM(PUBLIC) "URL地址">

在XML中,实体必须在DOCTYPE声明中声明。<!DOCTYPE [...]>声明在XML声明的后面
如:<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE 根元素名 [
<!ENTITY 实体引用名 “引用内容”>
<!ENTITY 实体引用名 SYSTEM "引用内容">

]>

实例:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE root[
<!ENTITY titlue "引用字符1">
<!ENTITY titlue2 "引用字符2">
]>
<root>
<title value="&titlue;"> &titlue; </title>
<title2>
<value><a>&titlue2;</a></value>
</title2>

</root>

引用多个xml文件实例:

有one.xml文件和two.xml文件

<?xml version="1.0" encoding="GBK"?>
<root>
<项目>gbk</项目>
<时间>2018</时间>
<状态>start</状态>

</root>

<?xml version="1.0" encoding="GBK"?>
<root>
<姓名>ll</姓名>
<年龄>18</年龄>
<毕业学校>bj</毕业学校>
</root>

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE root[
<!ENTITY one SYSTEM "./one.xml">
<!ENTITY two SYSTEM "./two.xml">
]>
<root>
&one;
&two;
</root>

    注意:在引用实体时以‘&’开始‘;’结束。

参数实体:

    参数实体只能在DTD中使用,参数实体的声明格式:

  <!ENTITY % 实体名 "实体内容">

引用方式:%实体名;

注意:参数实体引用不能出现在内部DTD的标记声明内部可以在标记声明允许出现的地方出现对于外部DTD则没有这个限制。