1. 程式人生 > >XML學習3:XML基本語法(二)

XML學習3:XML基本語法(二)

       三XML屬性

       XML元素可以在開始標籤中包含屬性,類似HTML。屬性(Attribute)提供關於元素的額外(附加)資訊。

       XML屬性基本語法:<元素 屬性1=”屬性值” 屬性2=”屬性值”>元素內容</元素>  

       注意事項:

       1)屬性值用雙引號(")或單引號(')分隔(如果屬性值中有',用"分隔;有",用'分隔)。 

       2)一個元素可以有多個屬性。

       3)屬性名稱在同一個元素標記中只能出現一次。

       4)屬性值不能包括<, >, &之類的特殊字元,否則需要使用轉義字元。

       (1)XML屬性

       從HTML的學習中,你會回憶起這個:<img src="computer.gif">。"src"屬性提供有關<img>元素的額外資訊。在

HTML中(以及在XML中),屬性提供有關元素的額外資訊:

<img src="computer.gif">
<a href="demo.asp"> 

       屬性通常提供不屬於資料組成部分的資訊。在下面的例子中,檔案型別與資料無關,但是對需要處理這個元素的

軟體來說卻很重要:

<file type="gif">computer.gif</file>

      (2)XML屬性必須加引號

      屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person 標籤可以這樣寫:

<person sex="female">

      或者這樣也可以:

<person sex='female'>

      註釋:如果屬性值本身包含雙引號,那麼有必要使用單引號包圍它,就像這個例子:

<gangster name='George "Shotgun" Ziegler'>

      或者可以使用實體引用:

<gangster name="George"Shotgun"Ziegler">

      (3)XML元素與XML屬性對比

      請看這些例子:

<person sex="female">
    <firstname>Anna</firstname>
    <lastname>Smith</lastname>
</person> 

<person>
       <sex>female</sex>
       <firstname>Anna</firstname>
       <lastname>Smith</lastname>
</person> 

      在第一個例子中,sex是一個屬性。在第二個例子中,sex則是一個子元素。兩個例子均可提供相同的資訊。

      沒有什麼規矩可以告訴我們什麼時候該使用屬性,而什麼時候該使用子元素。我的經驗是在HTML中,屬性用起

來很便利,但是在XML中,您應該儘量避免使用屬性。如果資訊感覺起來很像資料,那麼請使用子元素吧。

       (4)W3C推薦的方式

       下面的三個 XML 文件包含完全相同的資訊:

       第一個例子中使用了 date 屬性:

<note date="08/08/2008">
       <to>George</to>
       <from>John</from>
       <heading>Reminder</heading>
       <body>Don't forget the meeting!</body>
</note> 

       第二個例子中使用了 date 元素:

<note>
      <date>08/08/2008</date>
      <to>George</to>
      <from>John</from>
      <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
</note> 

       第三個例子中使用了擴充套件的 date 元素(這是W3C推薦使用的):

<note>
      <date>
         <day>08</day>
         <month>08</month>
         <year>2008</year>
      </date>
      <to>George</to>
      <from>John</from>
      <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
</note>

      (5)避免XML屬性

      因使用屬性而引起的一些問題:

      1)屬性無法包含多重的值(元素可以)

      2)屬性無法描述樹結構(元素可以)

      3)屬性不易擴充套件(為未來的變化)

      4)屬性難以閱讀和維護

      請儘量使用元素來描述資料。而僅僅使用屬性來提供與資料無關的資訊。不要做這樣的蠢事(這不是XML應該被使

用的方):

<note day="08" month="08" year="2008" to="George" from="John" heading="Reminder" body="Don't forget the 
meeting!"></note>

      (6)針對元資料的XML屬性

      有時候會向元素分配ID引用。這些ID索引可用於標識XML元素,它起作用的方式與HTML中ID屬性是一樣的。這個

例子向我們演示了這種情況:

<messages>
  <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from>George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
</messages>

      上面的ID僅僅是一個識別符號,用於標識不同的便籤。它並不是便籤資料的組成部分。在此我們極力向您傳遞的理

念是:元資料(有關資料的資料)應當儲存為屬性,而資料本身應當儲存為元素。

      四XML驗證

      擁有正確語法的XML被稱為"形式良好"的XML。

      通過DTD驗證的XML是"合法"的XML。

      (1)形式良好的XML文件

      "形式良好"或"結構良好"的XML文件擁有正確的語法。

      "形式良好"(Well Formed)的XML文件會遵守前幾章介紹過的XML語法規則:

      1)XML文件必須有根元素;

      2)ML文件必須有關閉標籤;

      3)XML標籤對大小寫敏感;

      4)XML元素必須被正確的巢狀;

      5)XML屬性必須加引號;

      例項:

<?xml version="1.0" encoding="UTF-8"?>
<note>
      <to>George</to>
      <from>John</from>
      <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
</note>

      (2)驗證XML文件

      合法的XML文件是"形式良好"的XML文件,同樣遵守文件型別定義(DTD)的語法規則:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
       <to>George</to>
       <from>John</from>
       <heading>Reminder</heading>
       <body>Don't forget the meeting!</body>
</note>  
      在上例中,DOCTYPE宣告是對外部DTD檔案的引用。下面的段落展示了這個檔案的內容。

      (3)XML DTD

      DTD的作用是定XML文件的結構。它使用一系列合法的元素來定義文件結構:

<!DOCTYPE note [
   <!ELEMENT note(to,from,heading,body)>
   <!ELEMENT to(#PCDATA)>
   <!ELEMENT from(#PCDATA)>
   <!ELEMENT heading (#PCDATA)>
   <!ELEMENT body(#PCDATA)>
]> 

      (4)XML Schema

      W3C支援一種基於XML的DTD代替者,它名為XML Schema:

<xs:element name="note">

<xs:complexType>
  <xs:sequence>
    <xs:element name="to" type="xs:string"/>
    <xs:element name="from" type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

</xs:element> 

       上述的DTD和Schema我們會在後面的文章中詳細講解。

       五基本語法補充

       (1)CDATA區

       有些內容可能不想讓解析引擎解析執行,而是當作原始內容處理,用於把整段文字解釋為純字元資料而不是標記的

情況。包含大量<、>、&或者"字元。CDATA區中的所有字元都會被當作元素字元資料的常量部分,而不是XML標

記。

       CDATA區可以用於傳遞特殊字元,傳遞檔案資料。可以通過將圖片這類二進位制檔案以byte[]的形式放入CDATA區

中,需要使用時在以byte[]的方式讀出。在特殊的標籤CDATA下,所有的標籤、實體引用都被忽略,而被XML處理程

序一視同仁地當作字元資料看待。

       CDATA區的形式如下:<! [CDATA[文字內容]]>

       (2)處理指令(PI)

       處理指令,簡稱PI (Processing Instruction)。處理指令用來指揮解析引擎如何解析XML文件內容。指示當前的

XML檔案的內容,如何被顯示或者處理。

       處理指令必須以“<?”作為開頭,以“?>”作為結尾,XML宣告語句就是最常見的一種處理指令。 例如,在XML文件

中可以使用xml-stylesheet指令,通知XML解析引擎,應用css檔案顯示xml文件內容。

       語法格式:<?target arg*?>

       例子:使用XSTL處理當前的XML檔案:

<?xml-stylesheet type="text/xsl" href="book.xsl"?>

       綜合XML例項:

<?xml version="1.0" encoding="UTF-8"?>
<!--註釋-->
<書籍列表>
    <計算機書籍>
         <bookname isbn="0001">XML應用大全</bookname>
         <price>39.00</price>
     </計算機書籍>
     <計算機書籍>
         <bookname isbn="0002">Java應用大全</bookname>
         <price>139.00</price>
     </計算機書籍>
     <計算機書籍>
         <bookname isbn="0003">Oracle應用大全</bookname>
         <price>59.00</price>
     </計算機書籍>
     <計算機書籍>
         <bookname><<MySQL應用大全>></bookname>
         <price>59.00</price>
     </計算機書籍>
     <![CDATA[
     <計算機書籍>
         <bookname>C++應用大全</bookname>
         <price>59.00</price>
     </計算機書籍>
      ]]>
</書籍列表>
       瀏覽器顯示:


       六XML顯示

       在所有現代瀏覽器中,均能夠檢視原始的 XML 檔案。不要指望 XML 檔案會直接顯示為 HTML 頁面。

       (1)檢視XML檔案

       例項:

<?xml version="1.0" encoding="UTF-8"?>
<書籍列表>
    <計算機書籍>
         <書名>XML的今生今世</書名>
         <價格>66.66</價格>
         <簡要介紹>概述詳細描寫XML的從出生到衰老的整個過程</簡要介紹>
     </計算機書籍>
</書籍列表>

       瀏覽器顯示:


       (2)使用CSS顯示XML檔案

       通過使用CSS,可為XML檔案新增顯示資訊。

       在上面的XML程式碼中的XML宣告下面增加一行程式碼:

<?xml-stylesheet href="XML2.css" type="text/css"?>

       XML2.css檔案:

書名{  
    font-size: 20px;  
    font-weight: bold;  
    color: red;  
}  
  
價格 {  
    font-size: 30px;  
    font-weight: bolder;  
    color: blue;  
}  
  
簡要介紹{  
    font-size: 25px;  
    font-weight: bolder;  
    color: blue;  
}

       瀏覽器顯示:


       使用CSS格式化XML不是常用的方法,更不能代表XML文件樣式化的未來。W3C推薦使用XSLT。

       (3)使用XSLT顯示XML檔案

       通過使用XSLT,您可以向XML文件新增顯示資訊。

       使用XSLT顯示XML;XSLT是首選的XML樣式表語言。XSLT(eXtensible Stylesheet Language Transformations)

遠比CSS更加完善。

      在上面的XML程式碼中的XML宣告下面增加一行程式碼:

<?xml-stylesheet href="book.xsl" type="text/xsl"?> 

      book.xsl檔案程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns="http://www.w3.org/TR/REC-html40" result-ns="">
<xsl:template><xsl:apply-templates/></xsl:template>

<xsl:template match="/">
      <HTML>
           <HEAD>
               <TITLE>我的藏書</TITLE>
           </HEAD>
           <BODY>
                <xsl:apply-templates select="書籍列表"/>
           </BODY>
      </HTML>
</xsl:template>

<xsl:template match="書籍列表">
    <xsl:for-each select="計算機書籍">
      <UL>
          <LI><xsl:value-of select="書名"/></LI>
          <UL>
               <LI>價格:<xsl:value-of select="價格"/></LI>
               <LI>簡要介紹:<xsl:value-of select="簡要介紹"/></LI>
          </UL>
      </UL>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

       瀏覽器顯示: