XML基础教程(2)
XML 文檔包含 XML 元素。
什么是 XML 元素?
XML 元素指的是從(且包括)開始標(biāo)簽直到(且包括)結(jié)束標(biāo)簽的部分。
元素可包含其他元素、文本或者兩者的混合物。元素也可以擁有屬性。
<bookstore><book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上例中,<bookstore> 和 <book> 都擁有元素內(nèi)容,因為它們包含了其他元素。<author> 只有文本內(nèi)容,因為它僅包含文本。
在上例中,只有 <book> 元素?fù)碛袑傩?(category="CHILDREN")。
XML 命名規(guī)則
XML 元素必須遵循以下命名規(guī)則:
- 名稱可以含字母、數(shù)字以及其他的字符
- 名稱不能以數(shù)字或者標(biāo)點符號開始
- 名稱不能以字符 “xml”(或者 XML、Xml)開始
- 名稱不能包含空格
可使用任何名稱,沒有保留的字詞。
最佳命名習(xí)慣
使名稱具有描述性。使用下劃線的名稱也很不錯。
名稱應(yīng)當(dāng)比較簡短,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。如果您按照這樣的方式進行命名:"first-name",一些軟件會認(rèn)為你需要提取第一個單詞。
避免 "." 字符。如果您按照這樣的方式進行命名:"first.name",一些軟件會認(rèn)為 "name" 是對象 "first" 的屬性。
避免 ":" 字符。冒號會被轉(zhuǎn)換為命名空間來使用(稍后介紹)。
XML 文檔經(jīng)常有一個對應(yīng)的數(shù)據(jù)庫,其中的字段會對應(yīng) XML 文檔中的元素。有一個實用的經(jīng)驗,即使用數(shù)據(jù)庫的名稱規(guī)則來命名 XML 文檔中的元素。
非英語的字母比如 éòá 也是合法的 XML 元素名,不過需要留意當(dāng)軟件開發(fā)商不支持這些字符時可能出現(xiàn)的問題。
XML 元素是可擴展的
XML 元素是可擴展,以攜帶更多的信息。
請看下面這個 XML 例子:
<note><to>George</to>
<from>John</from>
<body>Don't forget the meeting!</body>
</note>
讓我們設(shè)想一下,我們創(chuàng)建了一個應(yīng)用程序,可將 <to>、<from> 以及 <body> 元素提取出來,并產(chǎn)生以下的輸出:
MESSAGETo: George
From: John
Don't forget the meeting!
想象一下,之后這個 XML 文檔作者又向這個文檔添加了一些額外的信息:
<note><date>2008-08-08</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
那么這個應(yīng)用程序會中斷或崩潰嗎?
不會。這個應(yīng)用程序仍然可以找到 XML 文檔中的 <to>、<from> 以及 <body> 元素,并產(chǎn)生同樣的輸出。
XML 的優(yōu)勢之一,就是可以經(jīng)常在不中斷應(yīng)用程序的情況進行擴展。
二。XML 屬性
XML 元素可以在開始標(biāo)簽中包含屬性,類似 HTML。
屬性 (Attribute) 提供關(guān)于元素的額外信息。
XML 屬性
從 HTML,你會回憶起這個:<img src="computer.gif">。"src" 屬性提供有關(guān) <img> 元素的額外信息。
在 HTML 中(以及在 XML 中),屬性提供有關(guān)元素的額外信息:
<img src="computer.gif"><a href="demo.asp">
屬性通常提供不屬于數(shù)據(jù)組成部分的信息。在下面的例子中,文件類型與數(shù)據(jù)無關(guān),但是對需要處理這個元素的軟件來說卻很重要:
<file type="gif">computer.gif</file>XML 屬性必須加引號
屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person 標(biāo)簽可以這樣寫:
<person sex="female">或者這樣也可以:
<person sex='female'>注釋:如果屬性值本身包含雙引號,那么有必要使用單引號包圍它,就像這個例子:
<gangster name='George "Shotgun" Ziegler'>或者可以使用實體引用:
<gangster name="George "Shotgun" Ziegler">XML 元素 vs. 屬性
請看這些例子:
<person sex="female"><firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
在第一個例子中,sex 是一個屬性。在第二個例子中,sex 則是一個子元素。兩個例子均可提供相同的信息。
沒有什么規(guī)矩可以告訴我們什么時候該使用屬性,而什么時候該使用子元素。我的經(jīng)驗是在 HTML 中,屬性用起來很便利,但是在 XML 中,您應(yīng)該盡量避免使用屬性。如果信息感覺起來很像數(shù)據(jù),那么請使用子元素吧。
我最喜歡的方式
下面的三個 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 元素(這是我的最愛):
<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>
避免 XML 屬性?
因使用屬性而引起的一些問題:
- 屬性無法包含多個值(子元素可以)
- 屬性無法描述樹結(jié)構(gòu)(子元素可以)
- 屬性不易擴展(為未來的變化)
- 屬性難以閱讀和維護
請盡量使用元素來描述數(shù)據(jù)。而僅僅使用屬性來提供與數(shù)據(jù)無關(guān)的信息。
不要做這樣的蠢事(這不是 XML 應(yīng)該被使用的方式):
<note day="08" month="08" year="2008"to="George" from="John" heading="Reminder"
body="Don't forget the meeting!">
</note>
針對元數(shù)據(jù)的 XML 屬性
有時候會向元素分配 ID 引用。這些 ID 索引可用于標(biāo)識 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 僅僅是一個標(biāo)識符,用于標(biāo)識不同的便簽。它并不是便簽數(shù)據(jù)的組成部分。
在此我們極力向您傳遞的理念是:元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))應(yīng)當(dāng)存儲為屬性,而數(shù)據(jù)本身應(yīng)當(dāng)存儲為元素。
三。XML 驗證
擁有正確語法的 XML 被稱為“形式良好”的 XML。
通過某個 DTD 進行了驗證的 XML 是“合法”的 XML。
形式良好的 XML 文檔
一個"形式良好"的 XML 文檔擁有正確的語法。
一個"形式良好"的 XML 文檔會遵守前幾章介紹過的 XML 語法規(guī)則:
- XML 文檔必須有根元素
- XML 文檔必須有關(guān)閉標(biāo)簽
- XML 標(biāo)簽對大小寫敏感
- XML 元素必須被正確的嵌套
- XML 屬性必須加引號
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
驗證 XML 文檔
一個合法的 XML 文檔是"形式良好"的 XML 文檔,同樣遵守文檔類型定義 (DTD) 的語法規(guī)則:
<?xml version="1.0" encoding="ISO-8859-1"?><!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 文件的引用。下面的段落展示了這個文件的內(nèi)容。
XML DTD
DTD 的作用是定義 XML 文檔的結(jié)構(gòu)。它使用一系列合法的元素來定義文檔結(jié)構(gòu):
<!DOCTYPE note [<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
如果您希望學(xué)習(xí) DTD,請訪問我們的 DTD 教程。
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>
如果您需要學(xué)習(xí) XML Schema,請訪問我們的 XML Schema 教程。
一個通用的驗證器
為了幫助您檢查 XML 文件的語法,我們創(chuàng)建了這個工具,以便您對任何 XML 文件進行語法檢查。
請看下一節(jié)。
四。查看 XML 文件
在所有現(xiàn)代瀏覽器中,可能夠查看原始的 XML 文件。
不要指望 XML 文件會直接顯示為 HTML 頁面。
查看 XML 文件
查看這個 XML 文件:note.xml
打開 XML 文件 - XML 文檔將顯示為代碼顏色化的根以及子元素。通過點擊元素左側(cè)的加號或減號,可以展開或收起元素的結(jié)構(gòu)。如需查看不帶有 + 和 - 符號的源代碼,請從瀏覽器菜單中選擇“查看源代碼”。
注釋:在 Netscape, Opera 以及 Safari 中,僅僅會顯示元素文本!要查看原始的 XML,請右擊頁面,然后選擇“查看源代碼”。
查看某個無效的 XML 文件
如果瀏覽器打開了某個有錯誤的 XML 文件,那么它會報告這個錯誤。
請查看這個 XML 文件:note_error.xml
其他的 XML 實例
請查看這些 XML 文檔,這會有助于您建立對 XML 的感性認(rèn)識。
一個 XML 的 CD 目錄為什么 XML 會這樣顯示?
XML 文檔不會攜帶有關(guān)如何顯示數(shù)據(jù)的信息。
由于 XML 標(biāo)簽由 XML 文檔的作者“發(fā)明”,瀏覽器無法確定像 <table> 這樣一個標(biāo)簽究竟描述一個 HTML 表格還是一個餐桌。
在沒有任何有關(guān)如何顯示數(shù)據(jù)的信息的情況下,大多數(shù)的瀏覽器都會僅僅把 XML 文檔顯示為源代碼。
在下面的章節(jié),我們會了解幾個有關(guān)這個顯示問題的解決方案,其中會使用 CSS、XSL、JavaScript 以及 XML 數(shù)據(jù)島。
五。使用 CSS 顯示 XML
通過使用 CSS,可為 XML 文檔添加顯示信息。
使用 CSS 顯示您的 XML?
使用 CSS 來格式化 XML 文檔是有可能的。
下面的例子就是關(guān)于如何使用 CSS 樣式表來格式化某個XML文檔:
這是 XML 文件:CD 目錄
這是樣式表:CSS 文件
最后,請查看效果:由 CSS 文件格式化的 CD 目錄
下面是此XML文件的一個片斷。 第二行,<?xml-stylesheet type="text/css" href="cd_catalog.css"?>,把這個 XML 文件鏈接到 CSS 文件:
<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
.
.
.
.
</CATALOG>
注釋:使用 CSS 格式化 XML 不能代表 XML 文檔樣式化的未來。XML 文檔應(yīng)當(dāng)使用 W3C 的 XSL 標(biāo)準(zhǔn)進行格式化!
六。使用 XSLT 顯示 XML
通過使用 XSLT,您可以向 XML 文檔添加顯示信息。
使用 XSLT 顯示 XML
XSLT 是首選的 XML 樣式表語言。XSLT (eXtensible Stylesheet Language Transformations) 遠(yuǎn)比 CSS 更加完善。
使用 XSLT 的方法之一是在瀏覽器顯示 XML 文件之前,先把它轉(zhuǎn)換為 HTML,正如以下的這些例子演示的那樣:
查看 XML 文件,XSLT 樣式表,查看結(jié)果。
下面是此 XML 文件的一個片斷。 第二行,<?xml-stylesheet type="text/xsl" href="simple.xsl"?>,把這個 XML 文件鏈接到 XSL 文件:
<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="simple.xsl"?>
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>
two of our famous Belgian Waffles
</description>
<calories>650</calories>
</food>
</breakfast_menu>
如果您需要學(xué)習(xí)更多有關(guān) XSLT 的知識,請訪問我們的《XSLT 教程》。
在服務(wù)器上通過 XSLT 轉(zhuǎn)換 XML
在上例中,XSLT 轉(zhuǎn)換是由瀏覽器完成的,瀏覽器讀取的是 XML 文件。
在使用 XSLT 來轉(zhuǎn)換 XML 時,不同的瀏覽器可能會產(chǎn)生不同結(jié)果。為了減少這種問題,可以在服務(wù)器上進行 XSLT 轉(zhuǎn)換。
查看結(jié)果。
請注意,不論轉(zhuǎn)換由服務(wù)器還是由瀏覽器進行,輸出結(jié)果完成相同。
轉(zhuǎn)載于:https://www.cnblogs.com/happyforev1/articles/1646820.html
總結(jié)
以上是生活随笔為你收集整理的XML基础教程(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目与团队管理体会
- 下一篇: 偶得--Unity在asp.net mv