本文介绍如何使用从
XPathDocument
对象创建的
XPathNavigator
对象导航 XML 文档。
原始产品版本:
Visual C#
原始 KB 编号:
308343
此示例使用 XML 数据加载
XPathDocument
对象,在数据上创建
XPathNavigator
对象作为视图,并通过浏览文档来显示 XML。
本文引用以下 Microsoft .NET Framework类库命名空间:
System.Xml
System.Xml.XPath
有关本文的 Microsoft Visual Basic .NET 版本,请参阅
如何使用 Visual Basic 通过 XPathNavigator 类导航 XML
。
本文假设你熟悉以下主题:
Visual C#
XML 术语
创建和读取 XML 文件
XML 路径语言 (XPath) 语法
如何使用 XPathNavigator 类导航 XML
在 Visual Studio 中创建新的 Visual C# 控制台应用程序。
本示例使用名为
Books.xml
的文件。 可以创建自己的
Books.xml
文件,也可以使用 .NET 软件开发工具包 (SDK) 快速入门中包含的示例。 如果未安装快速入门并且不想安装这些快速入门,请参阅
Books.xml
下载位置
的“参考”
部分。 如果安装了快速入门,
Books.xml
位于以下文件夹中:
\Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
可以将
Books.xml
复制到
\Bin\Debug
创建此项目的文件夹下的文件夹。
确保项目引用
System.Xml
命名空间。
using
在命名空间和
XPath
命名空间上
Xml
使用该语句,这样你就不需要在代码后面的这些命名空间中限定声明。 可以在任何其他声明之前使用该
using
语句,如下所示:
using System.Xml;
using System.Xml.XPath;
声明相应的变量。 声明用于 XPathDocument
保存 XML 文档的对象和 XPathNavigator
用于评估 XPath
表达式并移动文档的对象。 声明要 String
保存表达式的 XPath
对象。 在 Module1 中的过程中 Main
添加声明代码。
XPathNavigator nav;
XPathDocument docNav;
加载具有 XPathDocument
示例文件 Books.xml的对象。 该 XPathDocument
类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速且面向性能的缓存。 它类似于 XML 文档对象模型 (DOM) 但针对 XSLT 处理和 XPath 数据模型进行了高度优化。
// Open the XML.
docNav = new XPathDocument(@"c:\books.xml");
XPathNavigator
从文档创建对象。 XPathNavigator
使你可以在 XML 文档中同时移动属性节点和命名空间节点。
// Create a navigator to query with XPath.
nav = docNav.CreateNavigator();
使用该方法移动到文档的 MoveToRoot
根目录。 MoveToRoot
将导航器设置为包含整个节点树的文档节点。
//Initial XPathNavigator to start at the root.
nav.MoveToRoot();
使用该 MoveToFirstChild
方法移动到 XML 文档的子级。 该 MoveToFirstChild
方法移动到当前节点的第一个子节点。 如果有 Books.xml 源,则会从根文档移到子级文档、“批注”部分和“书店”节点。
//Move to the first child node (comment field).
nav.MoveToFirstChild();
使用该 MoveToNext
方法循环访问同级节点。 该 MoveToNext
方法移动到当前节点的下一个同级。
//Loop through all of the root nodes.
} while (nav.MoveToNext());
使用该 NodeType
属性可确保仅处理元素节点,并使用该 Value
属性显示元素的文本表示形式。
//Find the first element.
if (nav.NodeType == XPathNodeType.Element)
//Determine whether children exist.
if (nav.HasChildren == true)
//Move to the first child.
nav.MoveToFirstChild();
//Loop through all the children.
//Display the data.
Console.Write("The XML string for this child ");
Console.WriteLine("is '{0}'", nav.Value);
} while (nav.MoveToNext());
} while (nav.MoveToNext());
使用该 HasAttributes
属性确定节点是否具有任何属性。 还可以使用其他方法(例如 MoveToNextAttribute
)移动到属性并检查其值。
此代码段仅遍历根节点的后代,而不是整个树。
//Find the first element.
if (nav.NodeType == XPathNodeType.Element)
//if children exist
if (nav.HasChildren == true)
//Move to the first child.
nav.MoveToFirstChild();
//Loop through all the children.
//Display the data.
Console.Write("The XML string for this child ");
Console.WriteLine("is '{0}'", nav.Value);
//Check for attributes.
if (nav.HasAttributes == true)
Console.WriteLine("This node has attributes");
} while (nav.MoveToNext());
} while (nav.MoveToNext());
ReadLine
使用对象的方法Console
在控制台显示的末尾添加暂停,以便更轻松地显示上述结果。
//Pause.
Console.ReadLine();
生成并运行 Visual C# 项目。
完整代码列表
using System;
using System.Xml;
using System.Xml.XPath;
namespace q308343
class Class1
static void Main(string[] args)
XPathNavigator nav;
XPathDocument docNav;
docNav = new XPathDocument(@"c:\books.xml");
nav = docNav.CreateNavigator();
nav.MoveToRoot();
//Move to the first child node (comment field).
nav.MoveToFirstChild();
//Find the first element.
if (nav.NodeType == XPathNodeType.Element)
//Determine whether children exist.
if (nav.HasChildren == true)
//Move to the first child.
nav.MoveToFirstChild();
//Loop through all of the children.
//Display the data.
Console.Write("The XML string for this child ");
Console.WriteLine("is '{0}'", nav.Value);
//Check for attributes.
if (nav.HasAttributes == true)
Console.WriteLine("This node has attributes");
} while (nav.MoveToNext());
} while (nav.MoveToNext());
//Pause.
Console.ReadLine();
测试代码时,可能会收到以下异常错误消息:
类型System.Xml的未经处理的异常。XmlException 发生在system.xml.dll
其他信息:意外的 XML 声明。 XML 声明必须是文档中的第一个节点,并且不允许在文档之前显示空格字符。 第 1 行,位置
以下代码行出现异常错误:
docNav = new XPathDocument("c:\\books.xml");
若要解决此错误,请删除books.xml文档中第一个节点之前的空白字符 () 。
立即下载Books.xml
XPathNavigator 类
XPathDocument 类
XPath 示例
XML 路径语言 (XPath) 版本 1.0 W3C 建议 1999 年 11 月 16 日