首页 > 代码库 > 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,实体的引用时,引用符号“&”和"%"与实体名之间不能有空格,最后不能缺少英文符号“;”