使用 XPathDocument 及 XmlDocument 讀取 XML 資料

讀取 System.Xml.XPath 命名空間中的 XML 文件有兩種方式。 一種是使用唯讀的 XPathDocument 類別讀取 XML 文件,另一種是使用 XmlDocument 命名空間中可編輯的 System.Xml 類別讀取 XML 文件。

使用 XPathDocument 類別讀取 XML 文件

XPathDocument 類別會使用 XPath 資料模型,以快速且唯讀的方式來表示記憶體中的 XML 文件。 可使用 XPathDocument 類別的六個建構函式之一,建立該類別的執行個體。 這些建構函式可讓您使用 StreamTextReaderXmlReader 物件,以及 XML 檔案的 string 路徑,讀取 XML 文件。

下列範例說明如何使用 XPathDocument 類別的 string 建構函式來讀取 XML 文件。

Dim document As XPathDocument = New XPathDocument("books.xml")  
XPathDocument document = new XPathDocument("books.xml");  

使用 XmlDocument 類別讀取 XML 文件

XmlDocument 類別是 XML 文件的可編輯記憶體中表示,它會實作 W3C 文件物件模型 (DOM) 層級 1 核心及核心 DOM 層級 2。 可使用 XmlDocument 類別的三種建構函式之一,來建立該類別的執行個體。 您可籍由呼叫不具參數的 XmlDocument 類別建構函式,來建立新的空白XmlDocument 物件。 呼叫該建構函式後,請使用 Load 方法將 XML 資料從 XmlDocumentStreamTextReader 物件,以及 XML 檔案的 XmlReader 路徑載入到新的 string 物件。

下列範例說明如何使用不具參數的 XmlDocument 類別建構函式及 Load 方法來讀取 XML 文件。

Dim document As XmlDocument = New XmlDocument()  
document.Load("books.xml")  
XmlDocument document = new XmlDocument();  
document.Load("books.xml");  

決定 XML 文件的編碼方式

如先前各節所示,可使用 XmlReader 物件讀取 XML 文件,並建立 XPathDocumentXmlDocument 物件。 不過,XmlReader 物件可能會讀取未編碼的資料,因此不會提供任何編碼資訊。

XmlTextReader 類別會繼承 XmlReader 類別,透過其 Encoding 屬性提供編碼資訊,並可用於建立 XPathDocument 物件或 XmlDocument 物件。

如需 XmlTextReader 類別提供之編碼資訊的詳細資訊,請參閱 Encoding 類別參考文件中的 XmlTextReader 屬性。

建立 XPathNavigator 物件

將 XML 文件讀入 XPathDocumentXmlDocument 物件後,您可以建立 XPathNavigator 物件以選取、評估、巡覽以及 (在某些情況下) 編輯基礎 XML 資料。

除了 XPathDocument 類別之外,XmlDocumentXmlNode 類別也會實作 IXPathNavigable 命名空間的 System.Xml.XPath 介面。 所以,所有三個類別均可提供傳回 CreateNavigator 物件的 XPathNavigator 方法。

使用 XPathNavigator 類別編輯 XML 文件

除了選取、評估及巡覽 XML 資料之外,在某些情況下,XPathNavigator 類別還可用於編輯 XML 文件 (根據建立該文件的物件)。

XPathDocument 類別是唯讀的,而 XmlDocument 類別則可以編輯;因此,從 XPathNavigator 物件建立的 XPathDocument 物件不能用來編輯 XML 文件,而從 XmlDocument 物件建立的那些物件則可以。 XPathDocument 類別應該只能用來讀取 XML 文件。 如果需要編輯 XML 文件,或要求 XmlDocument 類別所提供之其他功能的存取權 (如事件處理),應使用 XmlDocument 類別。

CanEdit 類別的 XPathNavigator 屬性可指定 XPathNavigator 物件是否可編輯 XML 資料。

下表說明每個類別的 CanEdit 屬性值。

IXPathNavigable 實作 CanEdit
XPathDocument false
XmlDocument true

另請參閱