首页 > 代码库 > 2.XML语言

2.XML语言

XML语言

常见应用:

  XML技术除用于 /*保存有关系的数据*/之外,它还经常作软件配置文件,以描述程序模块之间的关系。

  在一个系统软件中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定

  例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块支持,为了准确描述这种关系,此时使用XML文件最为合适。

<soft>

  <A>

    <A1></A1>

    <A2></A2>

  </A>

  <B>

    <B1></B1>

    <B2></B2>

  </B>

</soft>


  一个XML文件分为以下几个内容:

    文档声明:<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

      字符编码通常需要写成 UTF-8,但是在windows默认是"gb2312",所以需要另存为 将字符编码改为UTF-8

      用encoding属性说明文档的字符编码  ; 用standalone 属性说明文档是否独立

    元素:XML元素指XML文件中出现的标签 (不允许交叉嵌套,只有一个根标签)

    一个标签有如下几种形式:

      包含标签体:<a>***</a>

    不包含标签体:<a></a>,简写为<a/>


    属性:
      一个标签可以有多个属性值,每个属性都有它自己的名称和取值,例如:<input name = "text">

      属性值一定要用双号或单引号引起来

      定义属性必须遵守与标签相同的命名规范

      在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:
      <input>

        <name>text</name>

      </input>


    注释:

      XML文件中的注释采用:"<!--注释-->"格式。

      注意: 1.XML 声明之前不能有注释 2.注释不能嵌套


    CDATA区 、特殊字符:

      对于CDATA 区域的内容,XML 解析程序不会处理,而是直接原封不动的输出

      语法:<![CDATA[内容]]>


    对于一些单个字符,若想显示其原始样式,也可以使用转义字符进行处理

    (& < > " ‘) --(&amp &lt &gt &quot &apos) "


  处理指令(processing instruction):简称PI。处理指令用来指挥解析引擎,应用css文件显示XML文档内容

    例如在XML文档中可以使用xml-stylesheet指令。通知XML解析引擎,应用css文件显示xml文档内容

    <?xml-stylesheet type = "text/css" href = "http://www.mamicode.com/1.css"?>

    处理指令必须以 "<?" 作为开头,以 "?>"作为结尾,XML声明语句就是最常见的一种指令处理

 

  XMLDTD约束和DTD校验

    DTD(文档类型定义)

    DTD校验可以在Myeclipse中进行

    举例(DTD文件)(book.dtd): 举例(XML文件)


  <!ELEMENT 书架(书+)> <?xml version = "1.0" ?>

     //引用DTD约束(本地),本地 用 SYSTEM 网上的用 PUBLIC 

  <!ELEMENT 书(书名,作者,售价)> <!DOCTYPE 书架 SYSTEM "book.dtd">

  <!ELEMENT 书名(#PCDATA)>

  <!ELEMENT 作者(#PCDATA)>

  <!ELEMENT 售价(#PCDATA)> 

  这个约束文件对应的格式为

  <书架>

     <书>

      <书名>JAVA</书名>

      <作者>***</作者>

      <售价>23.00元</售价>

    <书>

      <书名>MySQL</书名>

      <作者>****</作者>

      <售价>22.00元</售价>

    </书>

  </书架>

对于这个dtd约束文件的说明:

  //使用ELEMENT声明一个XML元素:语法格式: <!ELEMENT 元素名称 元素类型>

  元素类型可以是元素内容、或类型

  如为元素内容,则需要用()括起来,如 <!ELEMENT 书(书名,作者,售价)> <!ELEMENT 书名(#PCDATA)>

  如为元素类型,则直接书写 EMPTY:定义空元素 ANY:表示元素内容为任意类型


元素内容可以使用如下方式,描述内容的组成关系

  1.用逗号分隔,表示内容的出现顺序必须和声明时一致 <!ELEMENT MYFILE(TITLE,AUTHOR,EMAIL)>

  2.用|分隔,表示任选其一,即多个只能出现一个 <!ELEMENT MYFILE(TITLE|AUTHOR|EMAIL)>


在元素内容中也可以使用 + 、 * 、 ? 等符号表示元素出现的次数

  +:一次或多次(书+)

  ?: 0次或一次(书?)

  *: 0次或多次(书*)

  (书):至少出现一次

  也可以使用圆括号()批量设置,例:<!ELEMENT MYFILE((TITLE+,AUTHOR?,EMAIL*)|COMMENT)>


属性定义 attribute

  xml文档中的标签属性需通过ATTLIST为其设置属性

  语法格式:<!ATTLIST 元素名

        属性名1 属性值类型 设置说明

        属性明2 属性值类型 设置说明

        ...

       >

  例:<!ATTLIST 元素名 对应的XML文件

      类别 CDATA #REQUIRED <商品 类别="服装" 颜色="黄色">...</商品>

      颜色 CDATA #IMPLIED <商品 类别="服装">...</商品>

      ...

    >

  设置说明:#REQUIRED 必须设置该值

       #IMPLIED 可选

          #FIXED 默认值


  属性值类型:CDATA:普通文本字符串

        ENUMERATED 属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)

        ID:属性的设置值为一个唯一值 ID属性的值只能由字母,下划线开始,不能出现空白字符

        ENTITY(实体):用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了


  引用实体:语法格式:<!ENTITY 实体名称 "实体内容"> :直接转变成实体内容

        引用方式:&实体名称

        举例:<!ENTITY copyright "i am a programmer">...

        &copyright (等同于i am a programmer)


  参数实体:参数实体被DTD文件自身使用

  语法格式:<!ENTITY % 实体名称 "实体内容">

  引用方式:%实体名称

  举例:

    <!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址">

    <!ENTITY 个人信息 (%TAG_NAMES; | 生日)>

    <!ENTITY 各户信息 (%TAG_NAMES; | 公司名)>



  XML编程(CRUD) 增删改查 create read update delete

    XML解析技术:两种方式dom和sax

      1.dom(Document Object Model 文档对象模型)是W3C组织推荐的解析XML的一种方式

      ( 在内存中存储类似一个对象树的东西) 将XML文档变成一个Document对象,将每一个标签(节点)变成一个一个的ELEMENT对象,标签里面有文本,属性等对象

      2.sax(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有XML解析器都支持它

        从上往下读XML文件 读取一行就处理一行 所以无法进行增删改查 只能做读取

    /*Dom和Sax解析方法的区别:*/

      1.dom解析的优点是对文档crud比较方便,缺点是占用内存比较大

      2.sax解析的优点是占用内存小,解析速度快,缺点是只适合做文档的读取,不适合作文档的crud

  使用JAXP对XML文档进行DOM解析 对XML文档进行 CRUD操作

2.XML语言