天天看點

XML概述前言正文總結

1.xml  eXtensible  markup   language 可擴充标記語言

2.xml作用:  a.互動資料;  b.儲存資料;  c.配置檔案

3.xml和html

1)  html  超文本标記語言:  a.資料展示和使用者體驗.;  b.标記是固定的。

2)  xml 可擴充标記語言;  a.資料本身。  b.标記可擴充,可以自定義。

4.xml解析  1.xml解析器  2.浏覽器  3.myeclipse

5.xml 檔案的聲明

  <?xml version="1.0" encoding="GBK" ?>  version:檔案版本号  encoding:檔案編碼格式

XML(Extensible Markup Language,可擴充标記語言)  一種用來存儲和傳輸資料的元語言(  元語言:一種定義了與其他特定領域有關的,結構化的,語義化的文法語言).

  HTML由W3C規範和定義  ;XML可由使用者自定義;  XML定義和規範了HTML

 1.XML簡化了資料的傳輸

 2.XML簡化了資料的共享

 3.XML簡化了平台的變更

 檔案的字尾.xml

 <關鍵字>标簽體</關鍵字>

 關鍵字大小寫敏感

 <!--注釋 -->

  1.XML文檔的第一行必須有聲明

  2.關鍵字不能以數字下劃線開始,可以包涵數字下劃線字母

  3.關鍵字不能以XML/Xml/xml/開始

  4.标簽要合理嵌套

  5.标簽要成對出現,單标簽要正确結束

  6.屬性要以鍵值對的形式出現,屬性值要用""或者‘‘引起來

  7.有且僅有一對根标簽

 浏覽器預設校驗XML是否是格式良好的

 有效的XML = 格式良好的XML+DTD/Schema文法校驗

  定義XML的文法規範

  1.内部DTD(定義聲明在XML文檔内部)

  2.外部DTD(定義聲明DTD在XML文檔的外部)

   DTD檔案的字尾名.dtd

  内部定義:

   <!DOCTYPE 根标簽 [DTD文法]>

  外部DTD引入

   <!DOCTYPE 根标簽 SYSTEM "DTD檔案的路徑">

注:  使用XMLSPY軟體來校驗XML的有效性

  <!ELEMENT 元素名稱  (元素類型)>

   #PCDATA 所有字元資料

   ANY     表示任何資料

   EMPTY   不能含有任何内容

   <!ELEMENT book (title)>   隻含有一個子元素的純元素

   <!ELEMENT book (title,author)> 多個子元素有出現的先後順序用逗号分隔

   <!ELEMENT book (title|author)>  多個用|分隔 隻能取其一 相當于or

   <!ELEMENT book (title+,author)>  +表示元素可出現至少一次

   <!ELEMENT book (title?,author)>  ?表示0次或者一次

   <!ELEMENT book (title*,author)>  * 表示任意次數

   <!ELEMENT book (title*,(author1|author))>

   <!ELEMENT firstname  (#PCDATA|author)*>  元素中可以包含子元素和文本的混合

   <!ELEMENT firstname  (#PCDATA|author|author1)*>

   <!ATTLIST 元素名稱  屬性名稱  屬性值的類型   屬性特性>

 1. 屬性值類型

      CDATA   所有字元資料

      NMTOKEN(name token)  是CDATA的子集 不能包涵"<"">" ,不能包含空格

      NMTOKENS 是CDATA的子集,不能包涵"<"">"  能包含空格

      ID       屬性值為目前标簽的唯一辨別,不能是純數字,不能以數字開始

      IDREF    屬性值隻能是其他ID類型的值

      IDREFS   屬性值同時引用多個ID類型的值,多個值之間用空格隔開

2.     屬性特點

       #REQUIRED  必須出現

       <!ATTLIST   title   name    CDATA   ‘hello‘  >  設定屬性不出現并且設定預設值

       #IMPLIED   可選的

       #FIXED    固定值

3.例子:       <!ATTLIST   title   name    CDATA   #FIXED  ‘中國‘ >

     < > © "

   在外部DTD中<!ENTITY   實體名稱  ‘實體表示内容‘ >

   在XML中  &實體名稱;

  是xml中一種用來定義限制XML文檔結構的文法規範

  1.資料類型有限

  2.不可擴充

  3.不支援命名空間

  4.DTD的文法與XML的文法形式不同

  schema 文檔字尾 .xsd

  xml聲明

  <?xml version="1.0" encoding="utf-8"?>

  書寫schema的根标簽

  <xs:schema

   定義一個命名空間的别名(别名xs 别名所代表的命名 )

   xmlns:xs=""

   定義目前文檔的命名空間

   xmlns="guopeihaoren"

   目标XML文檔引用的命名空間

   targetNamespace="guopeihaoren"

   目前定義的元素是否納入目前命名空間的規範

   elementFormDefault="qualified"

   目前定義的屬性是否納入命名空間的規範

   attributeFormDefault="unqualified"

    值:qualified  納入命名空間的規範

        unqualified 不納入命名空間的規範

  >

  定義一個元素

  <xs:element name="class" type="xs:int"></xs:element>

  </xs:schema>

  書寫目标XML檔案

  XML聲明

  書寫XML根标簽

  <my:class

   根标簽的引用命名空間

   xmlns:my="guopeihaoren"

   定義命名空間xsi的命名空間值

   xmlns:xsi=""

   定義目前XML文檔所引用的schema檔案的路徑:命名空間  schema檔案名

   xsi:schemaLocation="guopeihaoren classSchema.xsd"

  >123</my:class>

  定義元素

  <xs:element></xs:element>

   屬性:name   定義标簽名稱

         type   定義元素體的取值類型

         maxOccurs 目前元素在父标簽中的最大出現次數

         minOccurs 目前元素在父标簽中最小出現的次數

         default  設定元素的預設值

         fixed    設定元素的固定取值

   屬性type取值:  基本資料類型、簡單資料類型、複雜資料類型

  xs:string   xs:int   xs:boolean  xs:double  xs:date  xs:time

  xs:decimal  任意精度類型

   <xs:simpleType name=""></xs:simpleType>

   <xs:element name="class" >

    <xs:simpleType >

     <xs:restriction base="xs:int">

      <xs:maxExclusive value="100"></xs:maxExclusive>

     </xs:restriction>

    </xs:simpleType>

   </xs:element>

   嵌入式:元素不能設定type屬性

    simpleType 不能設定name 屬性

   <xs:element name="class" type="testSimple"></xs:element>

   simpleType name 屬性:辨別目前simpleType類型

   <xs:simpleType name="testSimple">

    規範簡單類型的取值的限制  base屬性:簡單類型取的基本類型的值

    <xs:restriction base="xs:decimal">

       <!--設定取值的上限不包含邊界

    <xs:maxExclusive value="100"></xs:maxExclusive>

    設定取值的下限不包含邊界

    <xs:minExclusive value="90"></xs:minExclusive>

    設定取值的上限包含邊界

    <xs:maxInclusive value="100"></xs:maxInclusive>

    設定取值的下限包含邊界

    <xs:minInclusive value="90"></xs:minInclusive>

    設定數字類型的最大位數

    <xs:totalDigits value="3"></xs:totalDigits>

    設定小數點後的小數最大位數,注意隻能在xs:decimal這種類型下設定

    <xs:fractionDigits value="3"></xs:fractionDigits>

    設定字元串的精準長度

    <xs:length value="4"></xs:length>

    設定字元串的最大長度

     <xs:maxLength value="5"></xs:maxLength>

    設定字元串的最小長度

     <xs:minLength value="3"></xs:minLength>

    多個取其一

    <xs:enumeration value="big"></xs:enumeration>

    <xs:enumeration value="middle"></xs:enumeration>

    <xs:enumeration value="small"></xs:enumeration>

    采用正規表達式校驗

    <xs:pattern value="(13|14|15|18)\d{9}"></xs:pattern>

    對于空白字元的處理方式

    <xs:whiteSpace value="collapse"></xs:whiteSpace>

    -->

   </xs:restriction>

   </xs:simpleType>

   元素的type屬性設定成simpleType 的name屬性值

    <!--設定清單類型

    <xs:list itemType="xs:int"></xs:list>

    <xs:union memberTypes="str digital"></xs:union>

   <xs:simpleType name="str">

    <xs:restriction base="xs:string">

     <xs:enumeration value="china"></xs:enumeration>

     <xs:enumeration value="usa"></xs:enumeration>

    </xs:restriction>

   <xs:simpleType name="digital">

    <xs:restriction base="xs:int">

     <xs:pattern value="\d{3}"></xs:pattern>

    <xs:complexType name="com1">

     定義子元素出現的先後順序

     <xs:sequence maxOccurs="unbounded" minOccurs="1">

      子元素在父元素中出現的次數

      (要以一個整體形式出現 )

      <xs:element name="student1"  type="str"></xs:element>

      <xs:element name="student2"  type="digital"></xs:element>

     </xs:sequence>

    </xs:complexType>

   <!--定義多個 子元素沒有先後順序-->

   <xs:complexType name="com2">

    <xs:all >

     <xs:element name="student1"  type="str"></xs:element>

     <xs:element name="student2"  type="digital"></xs:element>

    </xs:all>

   </xs:complexType>

   <!--定義多個子元素中取其一-->

   <xs:complexType name="com3">

    <xs:choice >

         <xs:element name="student2"  type="digital"></xs:element>

    </xs:choice>

   <!--定義屬性-->

   <xs:complexType name="com4">

    <xs:attribute name="name" type="xs:int" use="required"></xs:attribute>

      use屬性 :optional  屬性是可選的

         required  必須的

         prohibited 屬性禁止設定

      fixed  : 設定屬性固定值

      default:設定屬性的預設值

    通過mixed="true"屬性設定混合

   <xs:complexType name="com2" mixed="true">

   <xs:complexType name="com5">

    <xs:simpleContent>

     base屬性設定元素的内容類型

     <xs:extension base="str">

      <xs:attribute name="name" type="digital" use="required"></xs:attribute>

     </xs:extension>

    </xs:simpleContent>

     <xs:restriction base="">

1. struts.xml配置檔案

2.struts.dtd是針對struts.xml配置檔案寫的限制

1.classXml.xml 測試schema的配置檔案

2.classSchema.xsd

1.  開始标記和結束标記以及标記之間内容.

  2.xml檔案是一個樹狀結構,元素有一個"根部",然後  在擴充"枝葉".

3.  xml檔案是包括一個單一進制素中,這個元素我們稱之為  "根元素"。根元素是必須的。

4.  元素的規則:  元素大小寫敏感。  元素要正确嵌套。  元素要關閉。  空元素:标記之間沒有内容。稱之為空元素.  可以簡寫<desc/>  

    >  >    <   <    &   &    "   "    ‘   '

    屬性要使用引号括起來。    可以是雙引号或者單引号都可以,但是要保持一緻。  

    實體引用都會被忽略,把整個資料當作一塊文本資料來看待。    格式<! [CDATA[文本資料]]>

    <!--注釋的内容-->

 11."格式良好"的xml

    遵守正确文法的xml檔案被稱為"格式良好"的xml。

    需要遵守的規則:    a.xml檔案必須要有根元素。    b.xml檔案的标記必須正确關閉。    c.xml檔案标記大小寫敏感。    d.xml檔案屬性要有引号括起來。    e.xml檔案标記必須要正确嵌套。

    Document  Type   Definition 文檔定義類型    定義xml檔案結構,和xml檔案标記的規則。   DTD檔案可以定義在XML檔案中,也可以定義在XML檔案外部

1.   DTD類型:

     PUBLIC(行業公用的)     SYSTEM(小範圍自定義的)

2.   DTD中定義規則 

     *表示出現0-n次     #PCDATA表示字元串      +表示出現1-n次      |表示或者(phone|mobile) 隻能出現一個     ?表示出現0-1次

   ATTLIST  标記名稱  屬性名  類型

   标記名稱  id  CDATA #REQUIRED 表示屬性是必須的

   标記名稱  id  CDATA  #IMPLIED 表示屬性不是必須的

  标記名稱   hot  CDATA  "false"  表示hot的預設值是false 如果定義了

  值就取定義的值,如果沒有定義 就取預設值 false

   Schema 和DTD 都是用來描述XML檔案結構。DTD無法解決名稱沖突的問題,    是以Schema出現了,支援命名空間(解決不同來源的DTD标記相同的問題)。

   Schema使用的是XML文法(自身就是XML),xml也稱作自描述語言。   Schema檔案的擴充xsd.   Schema名詞:     複雜元素(有子元素的元素)      簡單元素(葉子元素)

   解析xml方式:

      a.DOM (Document  Object  Model)

         優點:把xml檔案放到記憶體中為一個樹狀結構,可以周遊和修改節點。

         缺點:當檔案比較大的時候,記憶體壓力比較大,讀寫速度慢。

      b.SAX(Simple API  for XML)

       把xml檔案做為一個流,當觸發标記開始、标記内容開始、标記結束這些動作。

      優點:可以馬上開始,速度快,沒有記憶體壓力

      缺點:不能修改節點

   JDOM/DOM4J 這是目前市場上比較流行的兩種方式

   DOM4J 結合了DOM和SAX兩種解析方式的優點。  

   DOM4J API寫  XML檔案

     常用API方法:

       addElement(節點名稱);//添加元素

       setText(字元串);//給元素添加值

       addAttribute(屬性名稱,屬性值);//添加屬性