明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

XML 中的經(jīng)常見(jiàn)問(wèn)題

[摘要]一般問(wèn)題 什么是 XML? 可擴(kuò)展標(biāo)記語(yǔ)言 (XML) 是 Web 上的數(shù)據(jù)通用語(yǔ)言。它使開(kāi)發(fā)人員能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù),從許多不同的應(yīng)用程序傳遞到桌面,進(jìn)行本地計(jì)算和演示。XML 允許為特定應(yīng)用程序創(chuàng)建...
一般問(wèn)題

什么是 XML?

可擴(kuò)展標(biāo)記語(yǔ)言 (XML) 是 Web 上的數(shù)據(jù)通用語(yǔ)言。它使開(kāi)發(fā)人員能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù),從許多不同的應(yīng)用程序傳遞到桌面,進(jìn)行本地計(jì)算和演示。XML 允許為特定應(yīng)用程序創(chuàng)建唯一的數(shù)據(jù)格式。它還是在服務(wù)器之間傳輸結(jié)構(gòu)化數(shù)據(jù)的理想格式。

什么是 MSXML?

MSXML 是提供核心 XML 服務(wù)的 Microsoft 軟件組件。

Microsoft XML 分析器能夠做什么?

最新版本的 Microsoft 核心 XML 服務(wù)提供下面四種不同的功能。

基于文檔對(duì)象模型 (DOM) 的分析器,它能夠獲取文本流(能夠轉(zhuǎn)換到 XML 的文件、程序中的字符串或者任何其他文本)并將它轉(zhuǎn)換為能夠編程處理的可導(dǎo)航 XML 樹(shù)結(jié)構(gòu)。


SAX(Simple API for XML)分析器,它針對(duì)處理大型文檔和高吞吐量的情況進(jìn)行了優(yōu)化的。SAX 是基于事件的分析器,它讀取文檔并將分析事件(例如元素的開(kāi)始和結(jié)尾)直接報(bào)告給應(yīng)用程序。用戶創(chuàng)建的應(yīng)用程序?qū)崿F(xiàn)了處理不同事件的處理程序,這非常類似于處理圖形用戶界面 (GUI) 中的事件。


XSLT 處理器讀取 XSLT 文件,并將可擴(kuò)展樣式表轉(zhuǎn)換語(yǔ)言 (XSLT) 文件的指令應(yīng)用到 XML 文件,以產(chǎn)生某些類型的輸出。除了創(chuàng)建 XML結(jié)構(gòu)之外,XSLT 處理器還可以在得到的 XSLT 過(guò)濾器上執(zhí)行一定量的優(yōu)化,另外,從技術(shù)的角度看,它更像是一種編譯器。


驗(yàn)證分析器讀取文檔類型定義 (DTD) 或者 XML 架構(gòu),然后檢驗(yàn)實(shí)際得到的文檔的格式是否正確,以及是否不包含與架構(gòu)沖突的數(shù)據(jù)。請(qǐng)注意,僅對(duì)架構(gòu)而言,驗(yàn)證架構(gòu)將返回架構(gòu)本身作為對(duì)象,可以在以后在 HTML 列表框中創(chuàng)建選項(xiàng)時(shí)引用這個(gè)對(duì)象。
所有四種功能都包含在同一 MSXML 庫(kù)軟件包中,它可以從 MSDN XML 開(kāi)發(fā)人員中心(英文)免費(fèi)得到。

MSXML、MSXML2 和 MSXML3 之間的區(qū)別是什么?

在過(guò)去三年中 XML 經(jīng)歷了許多反復(fù),所以目前存在不同版本的 Microsoft XML 分析器也不奇怪。Internet Explorer 4.0 包含早期版本的 XML 分析器,它比 XSL、XML 數(shù)據(jù)或者大多數(shù)其他的 XML 技術(shù)(并且有完全不同的 DOM 模型)要早。該早期版本的分析器包含在 MSXML.dll 庫(kù)中。從 MSDN XML 開(kāi)發(fā)人員中心(英文)可將分析器升級(jí)到較新的一種。

我們極力建議您升級(jí)到新的分析器,因?yàn)樗獜?qiáng)大得多。Internet Explorer 5.0 包括 MSXML 2.0 分析器,它包含 XSL 和 XML 架構(gòu)的基本版本。MSXML2 是 SQL Server 2000 附帶的分析器版本。MSXML2 包含了許多性能增強(qiáng)的功能,并且在總體上提高了性能和可伸縮性。MSXML3 是當(dāng)前作為“技術(shù)預(yù)覽”附帶的版本。MSXML3 包括 XSLT 和 XPath 支持以及 SAX 接口。

XML 可以代替 HTML 嗎?

XML 比 HTML 提供更大的靈活性,但是它不可能很快代替 HTML。實(shí)際上,XML 和 HTML 能夠很好地在一起工作。Microsoft 希望許多作者和開(kāi)發(fā)人員都能同時(shí)使用 XML 和 HTML,比如用 XSLT 來(lái)生成 HTML。

在 HTML 中增加 XML 的好處是什么?

在 Web 上使用 XML 的好處有:

它提供用于本地計(jì)算的數(shù)據(jù)。傳遞到桌面的數(shù)據(jù)可以進(jìn)行本地計(jì)算。XML 分析器可以讀取數(shù)據(jù),并將它遞交給本地應(yīng)用程序(例如瀏覽器)進(jìn)一步查看或處理。數(shù)據(jù)也可以由使用 XML 對(duì)象模型的腳本或其他編程語(yǔ)言來(lái)處理。


向用戶提供正確的結(jié)構(gòu)化數(shù)據(jù)視圖。傳遞到桌面的數(shù)據(jù)可以以多種方式表示。本地?cái)?shù)據(jù)集,可以根據(jù)用戶喜好和配置等因素,以適當(dāng)?shù)男问,在視圖中動(dòng)態(tài)表現(xiàn)給用戶。


允許集成不同來(lái)源的結(jié)構(gòu)化數(shù)據(jù)。一般情況下,使用代理,在中間層服務(wù)器上集成來(lái)自后端數(shù)據(jù)庫(kù)和其他應(yīng)用程序的數(shù)據(jù),使該數(shù)據(jù)能夠傳遞給桌面或者其他服務(wù)器,做進(jìn)一步聚合、處理和分布。


描述來(lái)自多種應(yīng)用程序的數(shù)據(jù)。由于 XML 是可擴(kuò)展的,因此它可以用于描述來(lái)自多種應(yīng)用程序的數(shù)據(jù),從描述 Web 頁(yè)面集合到數(shù)據(jù)記錄。由于數(shù)據(jù)是自描述的,因此不需要數(shù)據(jù)的內(nèi)置描述,也能夠接收和處理數(shù)據(jù)。


通過(guò)粒度更新來(lái)提高性能。XML 允許粒度更新。開(kāi)發(fā)人員不必在每次有改動(dòng)時(shí)都發(fā)送整個(gè)結(jié)構(gòu)化數(shù)據(jù)集。有了粒度更新后,只有改變的元素才必須從服務(wù)器發(fā)送到客戶機(jī)。改變的數(shù)據(jù)可以在不必刷新整個(gè)頁(yè)面或表的情況下顯示。
XML 只適用于核心開(kāi)發(fā)人員嗎?

不。和 HTML 文檔一樣,XML 文檔可以由任何人創(chuàng)建 — 甚至是沒(méi)有任何編程經(jīng)驗(yàn)的人。XML 僅僅是一種描述信息的標(biāo)準(zhǔn)方式。此外,它還是一種語(yǔ)言,可以在沒(méi)有任何軟件的情況下用它來(lái)編寫。您可以在文本編輯器中編寫 XML 文檔,并且直接放入 Web 站點(diǎn),不需要編寫傳統(tǒng)方式下的任何代碼。

開(kāi)始使用 XML 時(shí)需要什么?

要使用 XML,您需要能夠讀取 XMl 文檔的 XML 分析器,并且使它的內(nèi)容能被處理。Microsoft 提供了一種分析器,可以從 MSDN XML 開(kāi)發(fā)人員中心(英文)下載。

要使用 XML 文檔,可以使用文本編輯器(例如記事本)或任何其他可以用于創(chuàng)建 HTML 頁(yè)面的編輯器。要?jiǎng)?chuàng)建完整形式的 XML 應(yīng)用程序,請(qǐng)使用諸如 Microsoft® Visual Studio® 的編程環(huán)境。

有如何使用 XML 的實(shí)際例子嗎?

XML 正在數(shù)量驚人的應(yīng)用程序中使用,范圍從 Web 站點(diǎn)創(chuàng)建和文檔化到數(shù)據(jù)庫(kù)集成和分布式編程。在下面幾個(gè)領(lǐng)域中,XML 有其用武之地:

業(yè)務(wù)對(duì)業(yè)務(wù)的傳輸。業(yè)務(wù)數(shù)據(jù)(發(fā)票、購(gòu)買定單、會(huì)計(jì)和稅務(wù)信息等等)是以 XML 格式在廠商之間電子傳輸?shù)摹Ec舊的電子數(shù)據(jù)交換 (EDI) 格式相比,XML 提供了許多優(yōu)點(diǎn),而不僅僅是可以在傳輸中從一種發(fā)票格式轉(zhuǎn)換到另一種。


分布式編程。XML 是非常理想的復(fù)雜多平臺(tái)應(yīng)用程序構(gòu)造方案,這樣就使得 Windows 服務(wù)器和其他操作系統(tǒng)的集成成為可能。


Web 站點(diǎn)體系結(jié)構(gòu)。由于 XML 的層次結(jié)構(gòu)和分布式特性,Web 站點(diǎn)開(kāi)發(fā)人員在他們 Web 站點(diǎn)的總體體系結(jié)構(gòu)和導(dǎo)航結(jié)構(gòu)中越來(lái)越多地使用它。此外,越來(lái)越多的目錄表和索引表、跟蹤用戶信息及 Web 站點(diǎn)狀態(tài)的 XML 結(jié)構(gòu)、基于 HTML 的組件和處理數(shù)據(jù)流的渠道,都用 XML 和 XSLT 編寫。


數(shù)據(jù)庫(kù)操作。XML 正成為與數(shù)據(jù)庫(kù)交互的流行工具 — 無(wú)論從 SQL 查詢中檢索 XML 數(shù)據(jù)集,還是用 XML 記錄更新數(shù)據(jù)庫(kù)。而且我們還有分離實(shí)現(xiàn)的優(yōu)點(diǎn)。通過(guò)將數(shù)據(jù)壓縮為 SML,就不需要對(duì)實(shí)際的數(shù)據(jù)庫(kù)結(jié)構(gòu)有任何了解。


文檔管理。目前的大多數(shù)公司都陷在文書(shū)工作的海洋里,而且會(huì)越來(lái)越糟。XML 正在越來(lái)越多地用于將文檔編碼成 XML,使文檔更易于檢索或提供鏈接到文檔的注釋上下文,以便更有效地進(jìn)行參考。
我可以忽略 XML 嗎?

如果您想在 Internet 世界中競(jìng)爭(zhēng)的話,那就不可以忽略 XML。XML 是導(dǎo)致以我們考慮編程本身的方式進(jìn)行模式轉(zhuǎn)移的一種語(yǔ)言。傳統(tǒng)的專用客戶機(jī)/服務(wù)器應(yīng)用程序,正在給“隨時(shí)隨地訪問(wèn)”的 Internet 服務(wù)讓位,XML 是處理任何事情(從數(shù)據(jù)訪問(wèn)處理到在該新環(huán)境中表現(xiàn)數(shù)據(jù))的邏輯媒體。

Microsoft Internet Explorer 4.0 支持 XML 嗎?

是的。Internet Explorer 4.0 支持 XML 下列功能:

通用的 XML 分析器,它讀取 XML 文件并將它們傳遞到應(yīng)用程序(例如查看器)進(jìn)行處理。應(yīng)用程序開(kāi)發(fā)人員可以使用 Microsoft 的兩個(gè)分析器:C++ 中的 Microsoft XML 分析和 Java 中的 Microsoft XML 分析器。


XML 對(duì)象模型 (XML OM) 使用 World Wide Web Consortium (W3C) 標(biāo)準(zhǔn)文檔對(duì)象模型 (DOM) 允許程序通過(guò) XML 分析器訪問(wèn)結(jié)構(gòu)化數(shù)據(jù),使開(kāi)發(fā)人員擁有交互和計(jì)算數(shù)據(jù)的能力。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) DOM 規(guī)范(英文) 。


XML 數(shù)據(jù)源對(duì)象 (XML DSO) 允許開(kāi)發(fā)人員連接到結(jié)構(gòu)化 XML 數(shù)據(jù),并用動(dòng)態(tài) HTML 的數(shù)據(jù)綁定機(jī)制將它提供給 HTML 頁(yè)面。
Internet Explorer 5.0 對(duì) XML 提供哪個(gè)級(jí)別的支持?

Internet Explorer 5 提供下列 XML 支持:

直接查看 XML。Microsoft XML 實(shí)現(xiàn)允許用戶通過(guò)他們的 Web 瀏覽器使用 XSL 或者層疊樣式表 (CSS) 查看 XML,就象查看 HTML 文檔一樣。


高性能、驗(yàn)證 XML 引擎。Internet Explorer 4.0 開(kāi)發(fā)人員熟悉的 XML 引擎已經(jīng)得到了很大的增強(qiáng),并且完全支持 W3C XML 1.0 和 XML 名稱空間,這樣開(kāi)發(fā)人員就可以在 Web 上統(tǒng)一限定元素名稱,從而避免了相同名稱的元素之間的沖突。Windows 中的本機(jī) XML 支持意味著,當(dāng)開(kāi)發(fā)人員在應(yīng)用程序和組件之間移動(dòng)數(shù)據(jù)時(shí),可以使用完整的 XML 處理功能來(lái)讀取和處理數(shù)據(jù)。


可擴(kuò)展樣式轉(zhuǎn)換語(yǔ)言 (XSLT) 支持。使用基于最新的 W3C Working Draft 的 Microsoft XSLT 處理器,開(kāi)發(fā)人員可以對(duì) XML 數(shù)據(jù)應(yīng)用樣式表,并以易于自定義的動(dòng)態(tài)和靈活方式來(lái)顯示數(shù)據(jù)。Microsoft XSLT 處理器的查詢功能也允許開(kāi)發(fā)人員用程序,在客戶機(jī)或服務(wù)器上,在 XML 數(shù)據(jù)集內(nèi)部查找和摘取信息。


XML 架構(gòu)。架構(gòu)(英文) 定義 XML 文檔規(guī)則,包括元素名稱和豐富的數(shù)據(jù)類型,它們的元素可以表現(xiàn)為組合,并且每個(gè)元素的屬性都可用。為了啟用多層應(yīng)用程序,Microsoft 將根據(jù)提交給 W3C XML 工作組的縮減 XML 數(shù)據(jù)架構(gòu) (XDR) 來(lái)發(fā)布 XML 架構(gòu)的技術(shù)預(yù)覽。


服務(wù)器端 XML。服務(wù)器端 XML 處理允許使用 XML 作為在多個(gè)分布式應(yīng)用程序服務(wù)器(甚至是跨越操作系統(tǒng)邊界)之間傳送數(shù)據(jù)的標(biāo)準(zhǔn)方式。


XML 文檔對(duì)象模型 (DOM)。XML DOM 是標(biāo)準(zhǔn)對(duì)象應(yīng)用程序編程接口,它使開(kāi)發(fā)人員能夠用程序控制 XML 文檔內(nèi)容、結(jié)構(gòu)、格式等等。Microsoft XML 實(shí)現(xiàn)包括對(duì) W3C XML DOM 建議的完全支持,并且可以用腳本、Visual Basic 開(kāi)發(fā)系統(tǒng)、C++ 和其他編程語(yǔ)言來(lái)訪問(wèn)。


C++ XML 數(shù)據(jù)源對(duì)象。XML DSO 允許將 HTML 元素直接綁定到 XML 數(shù)據(jù)島。此外,它還提高了性能,有強(qiáng)大的能力可以綁定到不同 XML 節(jié)點(diǎn)上,而且利用了 Internet Explorer 5 beta 中所有的新的數(shù)據(jù)綁定功能。
HTML、動(dòng)態(tài) HTML 和 XML 之間的關(guān)系是什么?

HTML 可以和 CSS 一起用于格式化和表示超鏈接頁(yè)面。動(dòng)態(tài) HTML,通過(guò) DOM,使 HTML 中的所有元素,都可以通過(guò)與語(yǔ)言無(wú)關(guān)的腳本和其他編程語(yǔ)言來(lái)訪問(wèn),從而在很大程度上提高了客戶機(jī)端的交互能力,而且不需要對(duì)服務(wù)器的額外需求。頁(yè)面的對(duì)象模型允許動(dòng)態(tài)更改任何方面的內(nèi)容(包括增加、刪除和移動(dòng))。

通過(guò)為結(jié)構(gòu)化數(shù)據(jù)添加 XML,為開(kāi)發(fā)人員提供了構(gòu)造下一代豐富、靈活 Web 應(yīng)用程序的技術(shù)。使用 XML,他們可以為桌面提供結(jié)構(gòu)化數(shù)據(jù),并且用 XML 對(duì)象模型計(jì)算數(shù)據(jù),F(xiàn)在的開(kāi)發(fā)人員可以在瀏覽器(例如 Microsoft Internet Explorer 4.0 和 Microsoft Internet Explorer 5)或者其他應(yīng)用程序中,通過(guò)腳本顯示基于 XML 的數(shù)據(jù)。此外,他們也可以對(duì)數(shù)據(jù)應(yīng)用格式化規(guī)則,而不需要使用 XSLT 樣式表的復(fù)雜腳本(實(shí)際上是將基于 XML 的數(shù)據(jù)轉(zhuǎn)換為顯示)。這兩種顯示基于 XML 數(shù)據(jù)的方法,都使得生成復(fù)雜數(shù)據(jù)的多個(gè)視圖成為可能。

為什么 XML 這么重要?

XML 將成為計(jì)算領(lǐng)域的未來(lái)。作為一種技術(shù),它的影響力將滲透到編程的每個(gè)方面,從嵌入式系統(tǒng)到圖形界面,到分布式系統(tǒng)以及數(shù)據(jù)庫(kù)管理。它實(shí)際上已經(jīng)成為軟件工業(yè)之間數(shù)據(jù)通信的標(biāo)準(zhǔn),并且迅速代替 EDI 系統(tǒng)成為全球幾乎所有工業(yè)進(jìn)行業(yè)務(wù)交換的主要媒體。它很有可能會(huì)成為創(chuàng)建和存儲(chǔ)大多數(shù)文檔的語(yǔ)言,不管是否在 Internet 上,并且有可能成為 Internet 應(yīng)用程序服務(wù)器的基礎(chǔ),有些人相信它將代替許多目前生產(chǎn)的小包裝產(chǎn)品。

Microsoft 提供什么 XML 產(chǎn)品?

Microsoft 正在努力為許多領(lǐng)域開(kāi)發(fā) XML 資源:

數(shù)據(jù)訪問(wèn)。最新的 ActiveX® 數(shù)據(jù)對(duì)象 (ADO) 的化身,已經(jīng)支持 XML 的生成和消費(fèi)將近一年了,并且 Microsoft SQL Server 2000 為基于 SQL 的信息和 XML 之間的互相轉(zhuǎn)換提供了許多接口。


瀏覽器支持。Microsoft 是第一個(gè)生產(chǎn)能夠閱讀 XML 文件(無(wú)論是用原始結(jié)構(gòu)形式,還是通過(guò) XSL 或 CSS 樣式表)的商業(yè)瀏覽器 (Internet Explorer 5) 的公司。


BizTalk Server 2000。Microsoft® BizTalk(TM) Server 2000 提供了在大量不同格式(包括 XML)之間通信的方式,來(lái)幫助推動(dòng)業(yè)務(wù)對(duì)業(yè)務(wù)的應(yīng)用程序。BizTalk Server 也包括了許多架構(gòu)生成和映射工具,從而大大簡(jiǎn)化了業(yè)務(wù)或商業(yè)需要的 XML 結(jié)構(gòu)的開(kāi)發(fā)。
在 Web 上傳輸,必須壓縮 XML 嗎?

一般來(lái)說(shuō),壓縮 XML 的需要是與應(yīng)用程序有關(guān)的,并且很大程度上是服務(wù)器和客戶機(jī)之間移動(dòng)數(shù)據(jù)量的函數(shù)。用于描述數(shù)據(jù)結(jié)構(gòu)的標(biāo)記的反復(fù)特性,使 XML 能夠非常好地壓縮數(shù)據(jù)。值得注意的是 HTTP 1.1 服務(wù)器和客戶機(jī)的壓縮都是標(biāo)準(zhǔn)的,XML 可以自動(dòng)從中受益。

XML 作為數(shù)據(jù)格式有多安全?有沒(méi)有增加 XML 安全性的計(jì)劃?

XML 和 HTML 一樣安全。正因?yàn)榘踩?HTTP (HTTPS) 可以用于對(duì) HTTP 添加密碼技術(shù),從而保護(hù)了 HTML,因此它也可以用于保護(hù) XML。XML 是表示結(jié)構(gòu)化數(shù)據(jù)的基于文本格式。這可以使數(shù)據(jù)的簡(jiǎn)單性和互操作性最大化。對(duì) XML 格式增加安全性和驗(yàn)證能力時(shí)可以采取許多步驟。首先,XML 可以在傳輸?shù)娇蛻糁霸诜⻊?wù)器上加密,然后在客戶機(jī)上解密。應(yīng)用于數(shù)據(jù)本身的數(shù)字簽名也可以驗(yàn)證 XML。

確認(rèn)

什么是 DTD 及其用途?

文檔類型定義 (DTD) 定義了一類 XML 文檔的正確語(yǔ)法。也就是說(shuō),它列出了許多元素名稱,什么元素可以和其他元素一起顯示,什么屬性可以用于每種元素類型等等。DTD 使用 XML 文檔使用的不同語(yǔ)法形式。

Web 開(kāi)發(fā)人員在使用 XML 描述數(shù)據(jù)時(shí)必須包括 DTD 嗎?

不。XML 可以用于描述有或沒(méi)有 DTD 的數(shù)據(jù)。術(shù)語(yǔ)“有效”XML 指代引用 DTD 的 XML 數(shù)據(jù),而“良好形成的”XML 是未使用 DTD 的 XML。此外,“良好形成的”XML 還是 XML 和標(biāo)準(zhǔn)統(tǒng)一標(biāo)記語(yǔ)言 (SGML) 的基本區(qū)別之一。很明顯,在這兩種情況下,XML 本身都必須遵守語(yǔ)言的標(biāo)準(zhǔn)(例如,所有標(biāo)記都必須是閉合的,并且標(biāo)記不能重疊)。

什么是 XML 架構(gòu)?它們與 DTD 的區(qū)別是什么?

雖然 XML 1.0 提供了定義 XML 文檔的內(nèi)容模型的機(jī)制 — DTD — 但是很明顯還需要定義內(nèi)容模型的更全面更有效的方法。XML 架構(gòu)是特殊的 XML 結(jié)構(gòu)的定義(從其組織和數(shù)據(jù)類型兩個(gè)方面)。XML 架構(gòu)使用“XML 架構(gòu)”語(yǔ)言來(lái)指定在架構(gòu)中如何定義元素的每種類型,以及與元素關(guān)聯(lián)的數(shù)據(jù)類型。與 DTD 相比,架構(gòu)的最鮮明的特點(diǎn),便是架構(gòu)本身就是 XML 文檔。這意味著閱讀它所描述的 XML 的工具也可以閱讀它。

Microsoft 的 XML 服務(wù)目前支持 XML 數(shù)據(jù)架構(gòu),它代表了在 1999 年 3 月 Internet Explorer 5 裝運(yùn)時(shí) “W3C 架構(gòu)”活動(dòng)的快照。XML 數(shù)據(jù)架構(gòu)允許開(kāi)發(fā)人員在他們的 XML 文檔中添加數(shù)據(jù)類型,以及定義開(kāi)放的內(nèi)容模型。這種對(duì) DTD 功能的擴(kuò)展對(duì) XML 編程很關(guān)鍵。

但是 W3C 正在準(zhǔn)備“XML 架構(gòu)定義 (XSD)”,它將成為“XML 架構(gòu)標(biāo)準(zhǔn)”。Microsoft 計(jì)劃在此規(guī)范成為建議后,立即使對(duì)“XML 架構(gòu)定義 (XSD)”的支持成為它核心 XML 服務(wù)的一部分。

什么是名稱空間,它們?yōu)楹沃匾?

名稱空間是 XML 的另一個(gè)高級(jí)功能,并作為 XML 1.0 規(guī)范的一部分,在 W3C 筆記中作了概述。它們?cè)试S開(kāi)發(fā)人員限定元素名稱和關(guān)系。名稱空間使元素名稱唯一可識(shí)別,從而避免了名稱相同,但是在不同詞典中定義的元素之間發(fā)生名稱沖突。它們?cè)试S混合來(lái)自不同名稱空間的標(biāo)記,這一點(diǎn)對(duì)多個(gè)來(lái)源的數(shù)據(jù)很重要。

例如,書(shū)店可以定義


名稱空間有助于清晰地定義這種差別。

XSLT 和 XPATH

什么是 XSLT?

XSLT(英文) ,或者用于轉(zhuǎn)換的可擴(kuò)展樣式表語(yǔ)言,它是在 1999 年 11 月 6 日獲得批準(zhǔn)的 W3C 建議。從標(biāo)記和編程兩重意義上說(shuō),這種語(yǔ)言提供了將 XML 結(jié)構(gòu)轉(zhuǎn)換到其他 XML 結(jié)構(gòu)、HTML 或者任何數(shù)量的其他文本格式(例如 SQL)的機(jī)制。雖然它可以用于創(chuàng)建 Web 頁(yè)面的顯示輸出,但是 XSLT 的實(shí)際功能在于能夠改變底層結(jié)構(gòu),而不是簡(jiǎn)單地改變這些結(jié)構(gòu)的媒體表示,就像在層疊樣式表 (CSS) 中一樣。

XSL、XQL、XSL 模式 和 XSLT 之間的區(qū)別是什么?

XSLT 源自 CSS 在對(duì) XML 文檔結(jié)構(gòu)改動(dòng)上的局限性,當(dāng)時(shí)創(chuàng)建 XML 的原因更傾向于代替 HTML 而不是提供通用數(shù)據(jù)描述語(yǔ)言。因此可擴(kuò)展樣式表語(yǔ)言 (XSL) 成為構(gòu)造格式化 XML 新方法的成果。

但是,“W3C 樣式工作”組的成員和早期 XML 采用者很快就發(fā)現(xiàn),能夠?qū)?XML 從一種格式轉(zhuǎn)換到另一個(gè)格式的語(yǔ)言,可以極大地簡(jiǎn)化生成的大量代碼。Microsoft 向 W3C 提交了一個(gè)建議,最初名稱為 XML 查詢語(yǔ)言(或 XQL),它隨之被 W3C 采納為 XSL 模式語(yǔ)言。該語(yǔ)言的大多數(shù)功能最終都被納入了 XSLT 規(guī)范中。

最終標(biāo)準(zhǔn)結(jié)合了為不同初始條件而修改的 XSLT 參數(shù),創(chuàng)建代碼功能塊的命名模板,以及大量用于數(shù)值和字符串處理的增強(qiáng)功能。XSLT 還為在語(yǔ)言中添加內(nèi)置功能提供方便,提供了 Microsoft 可在自己的實(shí)現(xiàn)中用來(lái)添加許多極其有用功能(包括訪問(wèn) COM 對(duì)象和腳本)的產(chǎn)品。

什么是 XPath?

XPath(英文) 是為 XML 定義的查詢語(yǔ)言,它提供在文檔中選擇節(jié)點(diǎn)子集的簡(jiǎn)單語(yǔ)法。通過(guò) XPath,通過(guò)指定類似于目錄的路徑(即名稱)以及路徑中的條件,可以檢索元素集合。XPath 對(duì) XSLT 和 XML DOM 都很重要,并與 XPointer 規(guī)范(允許根據(jù)統(tǒng)一資源定位符 [URL] 和 XPath 表達(dá)式的組合來(lái)選擇文檔片斷)有聯(lián)系。

為什么 XSLT 對(duì) XML 很重要?

XSLT 是將一種 XML 文檔轉(zhuǎn)換為另一種的語(yǔ)言。這意味著它提供了單源 XML 數(shù)據(jù)的機(jī)制,可以在 Web 頁(yè)面中創(chuàng)建由用戶動(dòng)態(tài)更改的豐富視圖,可以為目標(biāo)通信過(guò)濾數(shù)據(jù)。XSLT 對(duì)于業(yè)務(wù)規(guī)則編碼已經(jīng)足夠強(qiáng)大。它可以從數(shù)據(jù)生成圖形(不僅僅是 Web 頁(yè)面)。它甚至可以處理與其他服務(wù)器的通信 — 特別是和能夠集成到 XSLT 中的腳本模塊協(xié)作 — 以及在 XSLT 自身內(nèi)部生成適當(dāng)?shù)南。雖然它不可能代替桌面系統(tǒng)中的大多數(shù)交互(出于性能和使用方便性兩方面分原因),但是在未來(lái)的幾年中,XSLT 很有可能最終成為系統(tǒng)之間進(jìn)行通信的主要“編程”語(yǔ)言。

XSLT 和 CSS 之間的區(qū)別是什么?它們不是樣式表嗎?

層疊樣式表 (CSS) 的任務(wù)是對(duì) HTML 元素指定一組顯示屬性。CSS 決定了頁(yè)面的視覺(jué)外觀,但是不會(huì)改變?cè)次臋n的結(jié)構(gòu)。

另一方面,XSLT 也稱為基于模板的語(yǔ)言,它允許將某種模式映射到源文檔中,該源文檔的輸出是用 XML、HTML 或純文本書(shū)寫的。使用 XSLT,可以將 XML 文檔的結(jié)構(gòu)轉(zhuǎn)換為不同的 XML 文檔。例如,您可以更改 XML 文檔的順序、添加或刪除元素、執(zhí)行條件測(cè)試或者用元素的集合進(jìn)行迭代。

XSLT 和 CSS 不是兼容標(biāo)準(zhǔn)。一種在 XML 中創(chuàng)建 Web 頁(yè)面的有用技術(shù),是用 XSLT 將 XML 轉(zhuǎn)換為諸如列表或表的結(jié)構(gòu),然后將 CSS 應(yīng)用于結(jié)果,控制這些結(jié)構(gòu)在適當(dāng)媒體中的顯示。您甚至可以從 XSLT 創(chuàng)建 CSS。

標(biāo)準(zhǔn)

Microsoft 如何與 XML 標(biāo)準(zhǔn)兼容?

從 XML 語(yǔ)言開(kāi)始產(chǎn)生起,Microsoft 就站在了 XML 的最前沿,而且很值得注意的是,W3C 在過(guò)去幾年中所生成的大多數(shù) XML 建議和工作草案,都包括來(lái)自至少一個(gè)(在某些情況下可能是數(shù)個(gè))Microsoft 職員的輸入和參與。Microsoft 已經(jīng)多次被委以重任,與 W3C 標(biāo)準(zhǔn)組織一起,確保 XML 的開(kāi)發(fā)能使所有用戶受益,并且在許多不同領(lǐng)域的開(kāi)發(fā)中都作出了重要貢獻(xiàn),包括 XML 規(guī)范、DOM、XSLT 和架構(gòu)定義語(yǔ)言。Microsoft 承諾將與最新規(guī)范和標(biāo)準(zhǔn)保持一致。

XML 和 World Wide Web Consortium (W3C) 之間的關(guān)系是什么?

W3C 有一活躍的 XML 工作組。Microsoft 從 1996 年 6 月起就是該組織的共同發(fā)起者之一,從那時(shí)起許多業(yè)界企業(yè)都開(kāi)始加入,包括 Netscape Communications Corp.、IBM 和 Oracle。有關(guān) XML 標(biāo)準(zhǔn)過(guò)程的詳細(xì)信息,請(qǐng)?jiān)L問(wèn) W3C Web 站點(diǎn)(英文)。

XML 和 W3C 的地位關(guān)系如何?

XML 1.0 是在 1998 年 12 月被正式批準(zhǔn)的,現(xiàn)在仍是個(gè)穩(wěn)定的標(biāo)準(zhǔn)。有關(guān)當(dāng)前 XML 規(guī)范的詳細(xì)信息以及 W3C 內(nèi)部的提交和審閱過(guò)程,請(qǐng)參見(jiàn) W3C Web 站點(diǎn)(英文)。

DOM 在 W3C 中的地位如何?

DOM Level 1 的 W3C 文檔狀態(tài)為“推薦”。這說(shuō)明 W3C 目前正在提議將它作為 World Wide Web 上的標(biāo)準(zhǔn)。有關(guān) DOM 和在 W3C 內(nèi)部提交和審閱過(guò)程的詳細(xì)信息,請(qǐng)參見(jiàn) DOM 規(guī)范(英文)。

工具支持

SQL Server 和 ADO 支持 XML 嗎?

Microsoft ActiveX 數(shù)據(jù)對(duì)象 (ADO) 技術(shù),提供許多將數(shù)據(jù)庫(kù)記錄集(數(shù)據(jù)記錄集合)轉(zhuǎn)換為 XML 格式的方法,以及從給定結(jié)構(gòu)中獲取 XML 并將其轉(zhuǎn)換回 ADO 所支持?jǐn)?shù)據(jù)庫(kù)(包括 SQL Server 和 Oracle 數(shù)據(jù)庫(kù))的工具。此外,通過(guò) MSXML2 和 MSXML3 中的 XML 數(shù)據(jù)源對(duì)象,還可以將任意 XML 直接加載到 ADO 中以生成記錄集。

SQL Server 2000 還允許通過(guò) URL 直接設(shè)置和檢索 XML,方式和調(diào)用 Web 頁(yè)面非常相似。這是處理數(shù)據(jù)的強(qiáng)大機(jī)制,因?yàn)樗旧弦馕吨梢詫?SQL Server 數(shù)據(jù)直接集成到 XML 過(guò)濾器和 Web 頁(yè)面,基本上凡是有 XML 文檔的地方都可以集成 SQL Server 數(shù)據(jù)。此外,還可以設(shè)置自定義模板,來(lái)控制如何從 SQL Server 數(shù)據(jù)中產(chǎn)生 XML,使數(shù)據(jù)庫(kù)成為生成 XHTML 頁(yè)面的強(qiáng)大工具。

最后,諸如 BizTalk Server 這樣的應(yīng)用程序還允許在任意數(shù)量的不同數(shù)據(jù)源(從 XML 文檔到數(shù)據(jù)庫(kù)到 Excel 和 Word 文檔)之間進(jìn)行映射、為 Web 體系結(jié)構(gòu)創(chuàng)建復(fù)雜數(shù)據(jù)管道以及根據(jù) XML 數(shù)據(jù)庫(kù)需求構(gòu)造有效的架構(gòu)。

目前有 Microsoft 工具可以幫助我快速沿用 XML 嗎?

Microsoft BizTalk Server 2000 是用于數(shù)據(jù)交換的、基于 XML 的服務(wù)器,它提供啟用電子商務(wù)業(yè)務(wù)社會(huì)的基本結(jié)構(gòu)和工具。BizTalk Server 的基礎(chǔ)是基于規(guī)則的業(yè)務(wù)文檔路由、轉(zhuǎn)換和跟蹤基本結(jié)構(gòu)。該基本結(jié)構(gòu)允許公司通過(guò)在組織邊界之內(nèi)或之間的應(yīng)用程序中間交換業(yè)務(wù)文檔,例如購(gòu)買定單和發(fā)票,來(lái)集成、管理和自動(dòng)化業(yè)務(wù)過(guò)程。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)Microsoft BizTalk Server 2000(英文) 。

什么是 SOAP?

SOAP 是簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,是創(chuàng)建大范圍分布式、復(fù)雜計(jì)算環(huán)境的工具,該計(jì)算環(huán)境可使用現(xiàn)有的 Internet 基本結(jié)構(gòu)運(yùn)行在 Internet 上。SOAP 可以使應(yīng)用程序用許許多多方法在 Internet 上互相直接通信。有關(guān) SOAP 的詳細(xì)信息,請(qǐng)參見(jiàn) SOAP 規(guī)范(英文)。

XML 如何適用于 Microsoft Windows® Distributed InterNet Applications (Windows DNA) 策略來(lái)構(gòu)造三層并具有 Web 功能的應(yīng)用程序?

XML 正在快速成為將結(jié)構(gòu)化數(shù)據(jù)從中間層傳送到桌面的工具。基于 XML 的數(shù)據(jù)可以通過(guò)中間層代理與多種后端(數(shù)據(jù)庫(kù))源集成。架構(gòu)(參見(jiàn)“XML 數(shù)據(jù)”一節(jié))可以改進(jìn)該過(guò)程,并且開(kāi)發(fā)人員可以更精確地描述和交換數(shù)據(jù)。

問(wèn)題和解決方案

為什么在調(diào)用了 Load() 方法后,我的文檔對(duì)象仍然為空?

默認(rèn)情況下操作是異步加載的。這意味著如果提供 http URL 地址,那么 load() 方法將直接返回,并且文檔對(duì)象仍然為空,因?yàn)閿?shù)據(jù)還沒(méi)有從服務(wù)器返回。為了糾正這個(gè)問(wèn)題,請(qǐng)?jiān)诖a中添加下面的行:

xmldoc.async = false;

同時(shí),如果是從獨(dú)立的 C++ 應(yīng)用程序加載 http XML 文檔,那么必須查詢消息隊(duì)列才能繼續(xù)加載。

如何加載有外國(guó)和特殊字符的文檔?

文檔可以包含外國(guó)字符,例如:

foreign characters (úóíÿ)

例如 磲 的外國(guó)字符必須在前面加上 escape 序列。外國(guó)字符可以是 UTF-8 編碼或用不同編碼指定,如下所示:

foreign characters (磲)

現(xiàn)在可以正確加載 XML 了。

其他字符是保留在 XML 中的,并且需要以不同的方式處理。下面的 XML:

This & that
產(chǎn)生如下錯(cuò)誤:
此處不允許有空格。
行 0000001: This & that
位置 0000012: ----------^

此處 & 是 XML 句法結(jié)構(gòu)的一部分,如果它僅僅放在 XML 數(shù)據(jù)源內(nèi)部,那么不能解釋為 &。您需要替換稱為“實(shí)體”的特殊字符序列。

This & that
下面的字符需要相應(yīng)的實(shí)體:

< <
& &
> >
" "
' &apos;

引號(hào)字符被用作標(biāo)記中屬性值的定界符,因此通常不能在屬性值的內(nèi)部使用。例如,下面的內(nèi)容將返回錯(cuò)誤:


此處的單引號(hào)既用作屬性定界符,又在屬性值自身中。為了糾正這個(gè)問(wèn)題,可以將屬性定界符換成雙引號(hào):


或者可以將單引號(hào)轉(zhuǎn)義為實(shí)體 &apos;


上述兩種方式都將通過(guò) XML 對(duì)象模型中的 getAttribute 方法返回屬性值 John's Stuff。同樣,對(duì)于雙引號(hào),您可以使用實(shí)體
"。
也可以通過(guò)將文本放在 CDATA 節(jié)中來(lái)處理元素內(nèi)容中的特殊字符。下面的內(nèi)容是正確的:


在本例子中,XML 對(duì)象模型將 CDATA 節(jié)點(diǎn)顯示 xml 節(jié)點(diǎn)的子節(jié)點(diǎn),它將返回字符串

This & that is just "text" content.
作為 nodeValue。


如何在 Visual Studio 6.0 C++ 中使用 MSXML COM 組件?

在 Visual C++ 6.0 中使用 MSXML COM 組件的最簡(jiǎn)便方式是使用 #import 指令:

#import "msxml.dll" named_guids no_namespace#import "msxml.dll" named_guids no_namespace
它定義了所有 IXML* 接口和接口 ID,從而可以在應(yīng)用程序中使用它們了。也可以從 INETSDK 獲取 MSXML 類型庫(kù)和頭文件(英文),以及包含類 IIDs 的 uuid.lib。

如何在 XML 中使用 HTML 實(shí)體?

下面的 XML 包含 HTML 實(shí)體:

Copyright &copy; 2000, Microsoft Inc, All rights reserved.

它產(chǎn)生下列錯(cuò)誤:

引用未定義的實(shí)體 'copy'。
行: 1, 位置:23, 錯(cuò)誤碼:0xC00CE002
Copyright &copy; 2000, ...
----------------------^

這是因?yàn)?XML 只有五個(gè)內(nèi)置實(shí)體。關(guān)于內(nèi)置實(shí)體的詳細(xì)信息,請(qǐng)參閱如何加載有外國(guó)和特殊字符的文檔?。

要使用 HTML 實(shí)體,需要用 DTD 定義它們。有關(guān) DTD 的詳細(xì)信息,請(qǐng)參閱 W3C XML 建議(英文)。要使用該 DTD,請(qǐng)將它直接包括在 DOCTYPE 標(biāo)記中,如下所示:

Copyright &copy; 2000, Microsoft Inc, All rights reserved.
要加載它,需要關(guān)閉 IXMLDOMDocument 接口的 validateOnParse 屬性。請(qǐng)嘗試將它粘貼到“Validator 測(cè)試頁(yè)”中,關(guān)閉 DTD 驗(yàn)證,然后單擊“驗(yàn)證”。請(qǐng)注意文檔將加載,并且版權(quán)字符將顯示在 validator 頁(yè)面的末尾的 DOM 樹(shù)中。

如果已經(jīng)完成了 DTD 驗(yàn)證,那么必須將作為參數(shù)實(shí)體的 HTML 實(shí)體包括在現(xiàn)有的 DTD 中,如下所示:

%HTMLENT;
%HTMLENT;
它將定義所有 HTML 實(shí)體,以便在 XML 文檔中使用它們。

在元素內(nèi)容中如何處理空白字符?

XML DOM 有三種訪問(wèn)元素文本內(nèi)容的方式:

屬性 行為
nodeValue 按照原始的 XML 源中指定的那樣,返回 TEXT、CDATA、COMMENT 和 PI 節(jié)點(diǎn)上的原始文本內(nèi)容(包括空白字符)。對(duì)于 ELEMENT 節(jié)點(diǎn)和 DOCUMENT 本身,則返回空值。
數(shù)據(jù) 與 nodeValue 相同
文本 重復(fù)連接指定子樹(shù)中的多個(gè) TEXT 和 CDATA 節(jié)點(diǎn)并返回組合結(jié)果。

注意: 空白字符包括新行、tab 和空格。

nodeValue 屬性通常返回原始文檔中的內(nèi)容,與文檔如何加載和當(dāng)前 xml:space 范圍無(wú)關(guān)。

文本屬性連接指定子樹(shù)中的所有文本并擴(kuò)展實(shí)體。這與文檔如何加載、preserveWhiteSpace 開(kāi)關(guān)的當(dāng)前狀態(tài)和當(dāng)前 xml:space 范圍有關(guān),請(qǐng)看如下所示:

preserveWhiteSpace = true when the document is loaded preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false
xml:space=preserve xml:space=default xml:space=preserve xml:space=default
保留 保留 保留 保留并截?cái)?

preserveWhiteSpace = false when the document is loaded preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false
xml:space=preserve xml:space=default xml:space=preserve xml:space=default
半保留 半保留并截?cái)?半保留 半保留并截?cái)?


此處的保留表示和原始 XML 文檔中完全相同的原始文本內(nèi)容,截?cái)嘁馕吨皩?dǎo)和尾部空格已經(jīng)刪除,半保留意味著保留了“重要的空白字符”并規(guī)范化了“不重要的空白字符”。重要的空白字符是文本內(nèi)容內(nèi)部的空白字符。不重要的空白字符是標(biāo)記之間的空白字符,請(qǐng)看如下所示:

\n
\t Jane\n
\tSmith \n

在本示例中,紅色是可以忽略的不重要的空白字符,而綠色是重要的空白字符,因?yàn)樗俏谋緝?nèi)容的一部分,因此有不可忽略的重要含義。所以在本例中,文本屬性返回下列結(jié)果:

狀態(tài) 返回值
保留 "\n\t Jane\n\tSmith \n"

保留并截?cái)?"Jane\n\tSmith"

半保留 " Jane Smith "

半保留并截?cái)?"Jane Smith"


請(qǐng)注意“半保留”將規(guī)范化不重要的空白字符,例如,新行和 tab 字符將退化為單個(gè)空格。如果更改 xml:space 屬性和 preserveWhiteSpace 開(kāi)關(guān),那么文本屬性將返回相應(yīng)的不同值。

CDATA and xml:space="preserve" subtree boundaries
在下面的例子中,CDATA 節(jié)點(diǎn)或“保留”節(jié)點(diǎn)的內(nèi)容將得到連接,原因是它們不參與不重要的空白字符規(guī)范化。例如:

\n
\t Jane \n
\t Smith ]>\n

在這種情況下,CDATA 節(jié)點(diǎn)內(nèi)部的空白字符不再與“不重要”空白字符“合并”,并且不會(huì)截?cái)唷R虼恕鞍氡A舨⒔財(cái)唷鼻闆r將返回下列內(nèi)容:

"Jane Smith "
在此, 和 標(biāo)記之間的不重要的空白字符將包括在內(nèi),與 CDATA 節(jié)點(diǎn)的內(nèi)容無(wú)關(guān)。如果用下列內(nèi)容代替 CDATA,那么將返回相同結(jié)果:

Smith
實(shí)體是特殊的

實(shí)體是作為 DTD 的一部分加載和分析的,并且顯示在 DOCTYPE 節(jié)點(diǎn)下。它們不一定要有任何 xml:space 范圍。例如:

Jane \n
\t\n
">
]>
&Jane;
假定 preserveWhiteSpace=false(在 DOCTYPE 標(biāo)記范圍內(nèi)),在分析實(shí)體時(shí)不重要的空白字符丟失。實(shí)體將不會(huì)有空白字符節(jié)點(diǎn)。樹(shù)將類似于:

DOCTYPE foo
ENTITY: Jane
ELEMENT: employee
ELEMENT: name
TEXT: Jane
ELEMENT: title
TEXT>:Software Design Engineer
ELEMENT: foo
ATTRIBUTE: xml:space="preserve"
ENTITYREF: Jane

請(qǐng)注意,在 DOCTYPE 內(nèi)部 ENTITY 節(jié)點(diǎn)下顯露的 DOM 樹(shù)不包含任何 WHITESPACE 節(jié)點(diǎn)。這意味著 ENTITYREF 節(jié)點(diǎn)的子節(jié)點(diǎn)也沒(méi)有 WHITESPACE 節(jié)點(diǎn),即使實(shí)體引用在 xml:space="preserve" 的范圍內(nèi)也是這樣。

給定文檔中引用的每個(gè) ENTITY 的實(shí)例通常都有相同的樹(shù)。

如果實(shí)體必須絕對(duì)保留空白字符,那么它必須在自己內(nèi)部指定自己的 xml:space 屬性,或者文檔 preserveWhiteSpace 開(kāi)關(guān)必須設(shè)置為 true。

如何處理屬性中的空白字符?

有幾種方式可以訪問(wèn)屬性值。IXMLDOMAttribute 接口有 nodeValue 屬性,它等價(jià)于作為 Microsoft 擴(kuò)展的 nodeValue 和 text 屬性。這些屬性返回: 屬性 返回的文本
attrNode.nodeValue
attrNode.value
getAttribute("name") 返回和原始文檔中完全相同的內(nèi)容(和擴(kuò)展的實(shí)體)。
attrNode.nodeTypedValue Null
attrNode.text 除了前導(dǎo)和尾部的空白字符已經(jīng)截?cái)嘀,其他與 nodeValue 相同。


“XML 語(yǔ)言”規(guī)范為 XML 應(yīng)用程序定義了下列行為: 屬性類型 返回的文本
CDATA ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、枚舉
半規(guī)范化 全規(guī)范化
在此半規(guī)范化代表將新行和 tab 字符轉(zhuǎn)換為空格,但是多個(gè)空格不會(huì)退化為一個(gè)空格。

在 XML 對(duì)象模型中如何處理空白字符?

有些時(shí)候,XML 對(duì)象模型將顯示包含空白字符的 TEXT 節(jié)點(diǎn)?瞻鬃址唤?cái)嗪,多半?huì)帶來(lái)一些混亂。例如下面的 XML 例子:





]>

Smith
John


生成下列樹(shù):

Processing Instruction: xml
DocType: person
ELEMENT: person
TEXT:
ELEMENT: lastname
TEXT:
ELEMENT: firstname
TEXT:

名字和姓氏兩邊是只包含空白字符的 TEXT 節(jié)點(diǎn),因?yàn)椤皃erson”元素的內(nèi)容模型是 MIXED;它包含 #PCDATA 關(guān)鍵字。MIXED 內(nèi)容模型指定元素之間可以有文本存在。因此,下面的內(nèi)容也是正確的:


My last name is Smith and my first name is
John


結(jié)果是類似于下面的樹(shù):

ELEMENT: person
TEXT: My last name is
ELEMENT: lastname
TEXT: and my first name is
ELEMENT: firstname
TEXT:

如果沒(méi)有單詞“is”之后和 之前的空白字符,以及 之后和單詞“and”之前的空白字符,那么句子便無(wú)法理解。因此,對(duì)于 MIXED 內(nèi)容模型來(lái)說(shuō),文字組合、空白字符和元素都是相關(guān)的。對(duì)于非 MIXED 內(nèi)容模型來(lái)說(shuō)則不是這樣。

要使只有空白字符的 TEXT 節(jié)點(diǎn)消失,請(qǐng)從“person”元素聲明中刪除 #PCDATA 關(guān)鍵字:



結(jié)果是下面清晰的樹(shù):

Processing Instruction: xml
DocType: person
ELEMENT: person
ELEMENT: lastname
ELEMENT: firstname


XML 聲明做什么?

XML 聲明必須列在 XML 文檔的頂部:


它指定下面的項(xiàng)目:

該文檔是 XML 文檔。在丟失或者還沒(méi)有指定 MIME 類型時(shí) MIME 探測(cè)器可以用它來(lái)檢測(cè)文件是否為類型 text/xml。
文檔符合 XML 1.0 規(guī)范。在以后 XML 有其他版本時(shí)這一點(diǎn)很重要。
文檔字符編碼。編碼屬性是可選的,默認(rèn)為 UTF-8。
注意:XML 聲明必須在 XML 文檔的第一行,因此下面的 XML 文件:



產(chǎn)生下面的分析錯(cuò)誤:

無(wú)效的 xml 聲明。
行 0000002:
位置 0000007: ------^
注意:XML 聲明是可選的。如果需要在頂部指定注釋或者處理指令,那么請(qǐng)不要放入 XML 聲明。但是,默認(rèn)的編碼將為 UTF-8。

如何以可讀格式打印我的 XML 文檔?

在用 DOM 從零開(kāi)始構(gòu)造文檔以產(chǎn)生 XML 文件時(shí),任何內(nèi)容都在一行上,相互之間沒(méi)有空格。這是默認(rèn)的行為。

構(gòu)造在 Internet Explorer 5 中的默認(rèn) XSL 樣式表,以可讀格式顯示和打印 XML 文檔。例如,如果已經(jīng)安裝了 IE5,請(qǐng)嘗試查看 nospace.xml 文件。瀏覽器中應(yīng)該顯示下面的樹(shù):

-
-
XYZ
12.56


在 XML 中沒(méi)有插入空白字符。

打印可讀 XML 是非常有趣的,特別是有定義不同類型內(nèi)容模型的 DTD 時(shí)。例如,在混合內(nèi)容模型 (#PCDATA) 下不能插入空格,因?yàn)樗赡芨淖儍?nèi)容的含義。比如請(qǐng)考慮下面的 XML:

Elephant
這最好不輸出為:

E
lephant
因?yàn)閱卧~邊界不再正確。

所有這些都使自動(dòng)化打印成為問(wèn)題。如果不需要打印可讀 XML,那么可以使用 DOM 在適當(dāng)?shù)奈恢貌迦肟瞻鬃址鳛槲谋竟?jié)點(diǎn)。


如何在 DTD 中使用名稱空間? 要在 DTD 中使用名稱空間,請(qǐng)?jiān)谑褂盟脑氐?ATTLIST 聲明中聲明它,如下所示:




名稱空間類型必須為 #FIXED。屬性的名稱空間也是這樣:



名稱空間和 XML 架構(gòu)
DTD 和 XML 架構(gòu)不能混合。例如,下面的

xmlns:x CDATA #FIXED "x-schema:myschema.xml"

將不導(dǎo)致使用在 myschema.xml 中定義的架構(gòu)定義。對(duì) DTD 和 XML 架構(gòu)的使用是互斥的。

如何在 Visual Basic 中使用 XMLDSO?

使用下面的 XML 作為例子:



Mark Hanson
206 765 4583


Jane Smith
425 808 1111


可以按如下方式綁定到 ADO 記錄集:

創(chuàng)建新的 VB 6.0 項(xiàng)目。
添加對(duì) Microsoft ActiveX Data Objects 2.1 或更高版本、Microsoft Data Adapter Library 和 Microsoft XML 2.0 版的引用。
用下面的代碼將 XML 數(shù)據(jù)加載到 XML DSO 控件中:
Dim dso As New XMLDSOControl
Dim doc As IXMLDOMDocument
Set doc = dso.XMLDocument
doc.Load ("d:\test.xml")

用下面的代碼將 DSO 映射到使用 DataAdapter 的新記錄集對(duì)象中:
Dim da As New DataAdapter
Set da.Object = dso
Dim rs As New ADODB.Recordset
Set rs.DataSource = da
訪問(wèn)數(shù)據(jù):
MsgBox rs.Fields("name").Value

結(jié)果顯示字符串“Mark Hanson”
如何在 Java 中使用 XML DOM?

必須已經(jīng)安裝 MSXML.DLL 的 IE5 版本。在 Visual J++ 6.0 中,從項(xiàng)目菜單選擇添加 COM 包裝程序,然后從 COM 對(duì)象列表中選擇“Microsoft XML 1.0”。該操作將把所需的 Java 包裝程序構(gòu)造到稱為“msxml”的新軟件包中。這些預(yù)先構(gòu)造的 Java 包裝程序也可以下載。類可以按如下方法使用:

import com.ms.com.*;
import msxml.*;
public class Class1
{
public static void main (String[] args)
{
DOMDocument doc = new DOMDocument();
doc.load(new Variant("file://d:/samples/ot.xml"));
System.out.println("Loaded " + doc.getDocumentElement().getNodeName());
}
}
代碼示例將從 sun religion 示例中加載 3.8MB 測(cè)試文件“ot.xml”。Variant 類用于包裝 Win32 VARIANT 基本類型。

因?yàn)樵诿看螜z索節(jié)點(diǎn)時(shí)實(shí)際上都獲得了新的包裝程序,因此不能在節(jié)點(diǎn)上使用指針比較。因此,不要使用下面的代碼,

IXMLDOMNode root1 = doc.getDocumentElement();
IXMLDOMNode root2 = doc.getDocumentElement();
if (root1 == root2)...
而要使用下面的代碼:

if (ComLib.isEqualUnknown(root1, root2)) ....
.class 包裝程序的總大小大約為 160KB。但是,為了與 W3C 規(guī)范完全符合,應(yīng)該只使用 IXMLDOM* 包裝程序。下面的類是舊的 IE 4.0 XML 接口,可以從 msxml 文件夾中刪除它們:

IXMLAttribute*,
IXMLDocument*, XMLDocument*
IXMLElement*,
IXMLError*,
IXMLElementCollection*,
tagXMLEMEM_TYPE*
_xml_error*
這使大小減少為 147KB。同時(shí)還可以刪除下面的項(xiàng)目:

DOMFreeThreadedDocument
在 Java 應(yīng)用程序中從多個(gè)線程訪問(wèn) XML 文檔。
XMLHttpRequest
用 XML DAV HTTP 擴(kuò)展與服務(wù)器通信。
IXTLRuntime
定義 XSL 樣式表腳本對(duì)象。
XMLDSOControl
綁定到 HTML 頁(yè)面中的 XML 數(shù)據(jù)。
XMLDOMDocumentEvents
在分析過(guò)程中返回回調(diào)。
這可以將大小減少到 116KB。要使它更小,請(qǐng)考慮 DOM 本身有兩層的事實(shí):核心層包括:

DOMDocument, IXMLDOMDocument
IXMLDOMNode*
IXMLDOMNodeList*
IXMLDOMNamedNodeMap*
IXMLDOMDocumentFragment*
IXMLDOMImplementation
IXMLDOMParseError
和用戶可能需要保留的 DTD 信息:

IXMLDOMDocumentType
IXMLDOMEntity
IXMLDOMNotation
XML 文檔中的所有節(jié)點(diǎn)類型都是 IXMLDOMNode,它提供全部功能,但是存在每種節(jié)點(diǎn)類型的更高級(jí)別的包裝程序。因此,如果修改 DOMDocument 包裝程序并將這些特定類型更改為使用 IXMLDOMNode,那么所有下面的接口都可以刪除:

IXMLDOMAttribute
IXMLDOMCDATASection
IXMLDOMCharacterData
IXMLDOMComment
IXMLDOMElement
IXMLDOMProcessingInstruction
IXMLDOMEntityReference
IXMLDOMText
刪除這些將使大小減少到 61KB。但是,對(duì) IXMLDOMElement 來(lái)說(shuō),getAttribute 和 setAttribute 方法都是有用的。否則需要使用:

IXMLDOMNode.getAttributes().setNamedItem(...)