首页 > 代码库 > XML基础
XML基础
<?xml version="1.0" encoding="UTF-8"?>
<booklist>
<book isbn="0000000">
<name>PHP</name>
<author>lin3615</author>
<press>mypress</press>
<pubdate>2014.7</pubdate>
<price>¥100.00</price>
</book>
<book isbn="0000001">
<name>mysql</name>
<author>lin3615</author>
<press>mypress</press>
<pubdate>2014.7</pubdate>
<price>¥101.00</price>
</book>
<book isbn="0000002">
<name>javascript</name>
<author>lin3615</author>
<press>mypress</press>
<pubdate>2014.7</pubdate>
<price>¥102.00</price>
</book>
</booklist>
<!--
描述图书的一个XML文档。根元素是 booklist,下面有若干子元素book,在book中有表示具体数据的5个子元素 name,author,press,pubdate,price.另外,book元素还包含一个附加的属于它的属性 isbn
1.结构良好性
a.它总体是一个XML文档
b.它满足所有在XML1.0规范中提出的关于结构良好性的约束
c.在XML文档中被直接或间接引用的每一个实体也是结构良好的.
XML文档定义如下:
它包含至少一个元素,有一个叫根或文档的元素,它不能作为任何其它元素的内容出现
2.XML声明
第一行出现的 <?xml version="1.0"?>是XML规范规定的所有XML文件必须具有的一行,称为XML声明,并规定,这个声明必须写在每一个XML文档的第一行,以标记这是一个XML文档,否则就不是一个XML文档.
XML声明格式:
<?xml version="1.0" encoding="" standalone=""?>
可以省略 encoding和standalone,XML文档默认的字符系统为 UTF-8,如要指定别的就得指明字符集.
standalone属性,独立文档声明,以XML声明的成分出现,告诉文档是否存在一个外部的文档实体或参数实体。即在XML声明中的standalone属性用来定义是否存在外部的标记声明,如果不存在外部标记声明,standalone="yes",如果可能存在则 "no",如果不存在外部声明,standalone是不骨意义的.如果存在而没有声明,则默认为 "no",外部的声明仅表示外部声明的存在,如
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
XML元素
元素是XML最为重要的组成部分,如果XML文档中没有元素,则不是XML文档。在XML文档的根元素下可以有若干级子元素,各级子元素形成树形结构。
元素标记由用户自己定义。<开始标记名>内容</结束标记名>,内容称为元素值,除包含元素值外,还可以包含下一级子元素。命名规则如编程语言一样,元素可以嵌套,每个XML文档必须有且只有一个称为根的元素.XML元素也有属性,采用 名值对的形式,如是有多个属性,可用空格分格,如 <price currency="RMB" unit="YUAN">100.00</price>,元素和属性没有本质的区别,如上面可以把属性分解为元素
<price>100.00</price>
<currency>RMB</currency>
<unit>YUAN</unit>
但是这样做消除了与price的关系。属性的类型有三种,字符串类型,标记化类型,枚举类型
实体:XML文档可以包含至少一个存储单元,这些存储单元叫实体(entity),它们全部都有内容且由实标记体名称来标识(除文档实体和外部DTD子集外).每个XML文档有一个叫文档的实体,用来作为XML处理器的起始位置,并可以包含整个XML文档。实体可以是可解析和不可解析的。所以解析实体是:其内容与替换文件相联系,这个替换文件是XML文档的一个整体部分。所谓不可解析实体的是:它的内容可以是或不是文件,如果是文本,那么不是XML,每个不可解析的实体与一个表示法(notation)联系,由名称标识。引用实体原因如(<,>)之类符号作为XML标记使用,所以如HTML一样.需要实体的另一个原因是,可以通过实体引用调用事先定义好的内部或者外部实体,使多个XML文档可以访问和调用同一个实体,
实体声明::实体的类别可以按照引用方式和所处位置这两种方式来分类。按引用方式可以分为一般实体和参数实体,按所处的位置可以分为内部实体和外部实体。内部实体和外部实体的具体内容由一般实体和参数实体定义。实体必须先声明才能引用。
一般实体:
<!ENTITY 实体名 实体定义>
!和 ENTITY 不可缺少,实体定义是指实体所取的值
<!ENTITY qhppress "lin3615">
<!ENTITY mypress "yuan">
参数实体:
<!ENTITY % 实体名 参数实体>
!,ENTITY和% 必须的,参数实体是指实体定义可以被引用的一种实体类型,如
<!ENTITY % datetype "(#PCDATE)">
也定义多个值:
<!ENTITY % datetype "(STRING | INTERGE | DATE)">
定义一个外部实体文件URL,名为X的参数实体
<!ENTITY % X SYSTEM "http://www.lin3615.net/xml/x.dtd">
内部实体:
在XML文档中定义的实体,称为内部实体,一般实体和参数实体可以作为内部实体内容提要使用,所以内部实体也分了一般实体和参数实体。内部实体的定义方法就是一般实体和参数实体的定义方法,如
<?xml version="1.0" encoding="GB2312">
<!DOCTYPE books[
<!ENTITY hepress "lin3615">
<!ENTITY mypress "yuan">
]>
<booklist>
<name>php</name>
<press>&hepress</press>
</booklist>
声明了两个实体 hepress,mypress,位于内部,所以是内部实体
外部实体:
在XML 文档外部,也可以定义实体。这个实体是与XML文档分离独立的文件
<!ENTITY 实体名 SYSTEM/PUBLIC 外部实体文件URI NDATA 类型名>
标示符 SYSTEM和PUBLIC 是不能缺少的,它们是定义外部实体不可缺少的部分,外部实体文件URI是指外部实体的参考源,其内容是实体的替换文本。如果在外部实体定义中出现NDATA部分,则表示的“实体名” 是一个不可解析的实体,否则是一个可解析的实体
<!ENTITY fact SYSTEM "http://www.lin3615.net/xml/xml.xml">
<!ENTITY source SYSTEM "lin.gif" NDATA GIF>
这里表明 source 是不可解析的实体。把图形文件作为不可解析实体进行处理
实体参考
就是实体的调用或实体的引用.一般实体的引用方法: &实体名;
参数实体引用: %实体名;
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ENTITY hepress "xxx1">
<!ENTITY qhpress "xxx2">
<!ENTITY tdpress "xxx3">
<!ENTITY ydpress "xxx4">
]>
<booklist>
<book isbn="00000001">
<name>PHP</name>
<author>lin3615</author>
<press>&hepress;</press>
</book>
<book isbn="1111112">
<name>mysql</name>
<author>yuan</author>
<press>&qhpress;</press>
</book>
</booklist>
关于参数实体的定义和引用,可以从下面的DTD定义中得到说明:
<!ENTITY % datatype "(PCDATA)">
<!ELEMENT name %datatype;>
<!ELEMENT author %datatype;>
表示在元素name和author中定义了它的类型是 PCDATA(可解析字符 parse character data),但这个类型的定义是通过引用参数实体datetype来实现的。
参数实体的多值引用如下:
<!ELEMENT desk (Small | Middle | Large)>
<!ELEMENT house(Small | Middel | Large)>
<!ELEMENT shirt(Small | Middle | Large)>
以下可通过参数实体来实现:
<!ENTITY % SIZE "(Small | Middle | Large)">
<!ELEMENT desk % SIZE;>
<!ELEMENT house % SIZE;>
<!ELEMENT shirt % SIZE;>
引用实体前必须先声明,内部实体位于XML文档内部,外部实体独立于XML文档,是一个结构良好的XML格式文件,实体引用不能出现递归引用,如是不能A引用B,B又引用A,实体的引用时,引用符号“&”和"%"与实体名之间不能有空格,最后不能缺少英文符号“;”