熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

如何使用 XPathNavigator 類浏覽 XML

2013-11-13 09:51:48  來源: .NET編程 
     本分步指南介紹了如何用從 XPathDocument 對象創建的 XPathNavigator 對象浏覽可擴展標記語言 (XML) 文檔本示例用 XML 數據加載 XpathDocument 對象針對該數據創建一個作為視圖的 XPathNavigator 對象並通過遍歷該文檔顯示 XML

要求

下面的列表列出了推薦使用的硬件軟件網絡基礎結構以及所需的服務包

  &#; Microsoft Visual C# NET

本文假定您熟悉下列主題

  &#;XML 術語

  &#;創建和讀取 XML 文件

  &#;XML 路徑語言 (XPath) 語法

如何使用 XPathNavigator 類浏覽 XML

  在 Visual Studio NET 中新建一個 Visual C# NET 控制台應用程序

備注本示例使用名為 Booksxml 的文件您可以創建自己的 Booksxml 文件也可以使用 NET 軟件開發工具包 (SDK) 快速入門中包括的示例如果您沒有安裝快速入門而且也不想安裝它們請參閱 Booksxml 下載位置的參考部分如果已經安裝快速入門則 Booksxml 位於以下文件夾中


\Program Files\MicrosoftNET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB 必須將 Booksxml 復制到 \Bin\Debug 文件夾該文件夾位於您在其中創建此項目的文件夾中

  確保該項目引用 SystemXml 名稱空間

  在 Xml 和 XPath 名稱空間上使用 using 語句這樣以後就不需要在代碼中限定這些名稱空間中的聲明了using 語句必須在所有其他聲明之前使用如下所示

  using SystemXml; using SystemXmlXPath;

  聲明合適的變量聲明 XPathDocument 對象以保存 XML 文檔並聲明 XPathNavigator 對象以計算 XPath 表達式並遍歷該文檔聲明 String 對象以保存 XPath 表達式在 Module 的 Main 過程中添加聲明代碼

  XPathNavigator nav; XPathDocument docNav;

  用示例文件 Booksxml 加載 XPathDocument 對象xpathdocument 類使用可擴展樣式表語言轉換 (XSLT) 為 XML 文檔處理提供快速和面向性能的緩存它類似於 XML 文檔對象模型 (DOM)但經過了高度優化以用於 XSLT 處理和 XPath 數據模型

  // Open the XML docNav = new XPathDocument(@c:\booksxml);

  從文檔創建 XPathNavigator 對象xpathnavigator 使您能夠在 XML 文檔中遍歷屬性節點和名稱空間節點

  // Create a navigator to query with XPath nav = docNavCreateNavigator();

  使用 MoveToRoot 方法移至文檔的根movetoroot 將浏覽器放到包含整個節點樹的文檔節點

  //Initial XPathNavigator to start at the root navMoveToRoot();

  使用 MoveToFirstChild 方法移至 XML 文檔的子級movetofirstchild 方法移至當前節點的第一個子級對於 Booksxml 的源是從根文檔移至子文檔注釋部分和 Bookstore 節點

  //Move to the first child node (comment field) navMoveToFirstChild();

  使用 MoveToNext 方法迭代通過同一層次上的節點使用 MoveToNext 方法移至當前節點下一層次的節點

  //Loop through all of the root nodes do { } while (navMoveToNext());

  使用 NodeType 屬性確保您只處理元素的節點使用 Value 屬性顯示元素的文本表示形式

  do { //Find the first element if (navNodeType == XPathNodeTypeElement) { //Determine whether children exist if (navHasChildren == true) { //Move to the first child navMoveToFirstChild(); //Loop through all the children do { //Display the data ConsoleWrite(The XML string for this child ); ConsoleWriteLine(is {} navValue); } while (navMoveToNext()); } } } while (navMoveToNext());

  使用 HasAttributes 屬性確定節點是否有任何屬性還可使用其他方法(如 MoveToNextAttribute)移至某個屬性並檢查它的值請注意該代碼段只遍歷根節點的子代而不是整個樹

  do { //Find the first element if (navNodeType == XPathNodeTypeElement) { //if children exist if (navHasChildren == true) { //Move to the first child navMoveToFirstChild(); //Loop through all the children do { //Display the data ConsoleWrite(The XML string for this child ); ConsoleWriteLine(is {} navValue); //Check for attributes if (navHasAttributes == true) { ConsoleWriteLine(This node has attributes); } } while (navMoveToNext()); } } } while (navMoveToNext());

  使用 Console 對象的 ReadLine 方法在控制台顯示的末尾添加 pause以便更容易地顯示上述結果

  //Pause ConsoleReadLine();

  生成並運行 Visual C#NET 項目

完整代碼列表

  using System; using SystemXml; using SystemXmlXPath; namespace q { class Class { static void Main(string[] args){ XPathNavigator nav; XPathDocument docNav; docNav = new XPathDocument(@c:\booksxml); nav = docNavCreateNavigator(); navMoveToRoot(); //Move to the first child node (comment field) navMoveToFirstChild(); do { //Find the first element if (navNodeType == XPathNodeTypeElement) { //Determine whether children exist if (navHasChildren == true) { //Move to the first child navMoveToFirstChild(); //Loop through all of the children do { //Display the data ConsoleWrite(The XML string for this child ); ConsoleWriteLine(is {} navValue); //Check for attributes if (navHasAttributes == true) { ConsoleWriteLine(This node has attributes); } } while (navMoveToNext()); } } } while (navMoveToNext()); //Pause ConsoleReadLine(); } } }

疑難解答

在測試代碼時您可能會收到以下異常錯誤信息
An unhandled exception of type SystemXmlXmlException occurred in systemxmldll

Additional information:System error該異常錯誤發生在以下代碼行上

  docNav = new XPathDocument(c:\\booksxml);

該異常錯誤是由無效的處理指令導致的例如處理指令可能包含多余的空格下面是無效處理指令的示例

  

若要解決該異常請執行以下操作之一
糾正無效的處理指令下面是有效處理指令的示例

  


下面是有效處理指令的示例從 Booksxml 文件中刪除 XML 處理指令
From:http://tw.wingwit.com/Article/program/net/201311/11778.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.