科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何使用 XPathNavigator 类浏览 XML

如何使用 XPathNavigator 类浏览 XML

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

   本分步指南介绍了如何用从 XPathDocument 对象创建的 XPathNavigator 对象浏览可扩展标记语言 (XML) 文档

作者:中国IT实验室 来源:中国IT实验室 2007年9月11日

关键字: web C# 编程

  • 评论
  • 分享微博
  • 分享邮件
       本分步指南介绍了如何用从 XPathDocument 对象创建的 XPathNavigator 对象浏览可扩展标记语言 (XML) 文档。本示例用 XML 数据加载 XpathDocument 对象,针对该数据创建一个作为视图的 XPathNavigator 对象,并通过遍历该文档显示 XML。

要求

下面的列表列出了推荐使用的硬件、软件、网络基础结构以及所需的服务包:

• Microsoft Visual C# .NET

本文假定您熟悉下列主题:

•XML 术语

•创建和读取 XML 文件

•XML 路径语言 (XPath) 语法

如何使用 XPathNavigator 类浏览 XML

1.在 Visual Studio. NET 中新建一个 Visual C# .NET 控制台应用程序。

备注:本示例使用名为 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 文件夹,该文件夹位于您在其中创建此项目的文件夹中。

2.确保该项目引用 System.Xml 名称空间。

3.在 Xml 和 XPath 名称空间上使用 using 语句,这样以后就不需要在代码中限定这些名称空间中的声明了。using 语句必须在所有其他声明之前使用,如下所示:

using System.Xml;
                  using System.Xml.XPath;

4.声明合适的变量。声明 XPathDocument 对象以保存 XML 文档,并声明 XPathNavigator 对象以计算 XPath 表达式并遍历该文档。声明 String 对象以保存 XPath 表达式。在 Module1 的 Main 过程中添加声明代码。

XPathNavigator nav; 
                  XPathDocument docNav;

5.用示例文件 Books.xml 加载 XPathDocument 对象。xpathdocument 类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速和面向性能的缓存。它类似于 XML 文档对象模型 (DOM),但经过了高度优化,以用于 XSLT 处理和 XPath 数据模型。

// Open the XML.
                  docNav = new XPathDocument(@"c:\books.xml");

6.从文档创建 XPathNavigator 对象。xpathnavigator 使您能够在 XML 文档中遍历属性节点和名称空间节点。

// Create a navigator to query with XPath.
                  nav = docNav.CreateNavigator();

7.使用 MoveToRoot 方法移至文档的根。movetoroot 将浏览器放到包含整个节点树的文档节点。

//Initial XPathNavigator to start at the root.
                  nav.MoveToRoot();

8.使用 MoveToFirstChild 方法移至 XML 文档的子级。movetofirstchild 方法移至当前节点的第一个子级。对于 Books.xml 的源,是从根文档移至子文档、"注释"部分和 Bookstore 节点。

//Move to the first child node (comment field).
                  nav.MoveToFirstChild();

9.使用 MoveToNext 方法迭代通过同一层次上的节点。使用 MoveToNext 方法移至当前节点下一层次的节点。

//Loop through all of the root nodes.
do {
                  } while (nav.MoveToNext());

10.使用 NodeType 属性确保您只处理元素的节点,使用 Value 属性显示元素的文本表示形式。

do {
//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.
do {
//Display the data.
Console.Write("The XML string for this child ");
Console.WriteLine("is '{0}'", nav.Value);
   } while (nav.MoveToNext()); 
       }
     }
                  } while (nav.MoveToNext());

11.使用 HasAttributes 属性确定节点是否有任何属性。还可使用其他方法(如 MoveToNextAttribute)移至某个属性并检查它的值。请注意,该代码段只遍历根节点的子代而不是整个树。

do {
//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.
do {
//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());

12.使用 Console 对象的 ReadLine 方法在控制台显示的末尾添加 pause,以便更容易地显示上述结果。

//Pause.
                  Console.ReadLine();

13.生成并运行 Visual C#.NET 项目。

完整代码列表

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();
do {
   //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.
do {
//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();
     }
   }
}

疑难解答

在测试代码时,您可能会收到以下异常错误信息:
An unhandled exception of type 'System.Xml.XmlException' occurred in system.xml.dll

Additional information:System error.
该异常错误发生在以下代码行上:
docNav = new XPathDocument("c:\\books.xml");
该异常错误是由无效的处理指令导致的。例如,处理指令可能包含多余的空格。下面是无效处理指令的示例:
若要解决该异常,请执行以下操作之一: 

纠正无效的处理指令。下面是有效处理指令的示例:
- 或 - 
下面是有效处理指令的示例:从 Books.xml 文件中删除 XML 处理指令。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章