使用 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 类是实现 W3C 文档对象模型 (DOM) 级别 1 核心和核心 DOM 级别 2 的 XML 文档在内存中的可编辑表示形式。 XmlDocument 类的实例使用其三个构造函数之一创建。 可以通过调用没有参数的 XmlDocument 类构造函数,创建新的空 XmlDocument 对象。 在调用了构造函数之后,使用 Load 方法以及 XML 文件的 XmlDocument 路径将 XML 数据从 StreamTextReaderXmlReader 对象加载到新的 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

请参阅