DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 用VB.NET和XPath簡化XML導航
用VB.NET和XPath簡化XML導航
編輯:XML詳解     
用VB.Net進行XML導航

XML文檔可能包含1~1000個或者更多的元素。你可能需要訪問XML文檔包含的全部數據,或者訪問這些數據的一個選定的子集。XPath提供了定位和選擇XML子集的語法,從而簡化了這一任務。.Net框架使用XPathNavigator類來執行XPath命令,但要想利用它,必須有一個可用的XML文檔。

可用.Net XPathDocument類來處理一個XML文檔的創建或檢索。這個類提供了大量方法和屬性,但我們重點關注的是CreateNavigator方法。該方法創建一個和XML文檔對應的XPathNavigator對象。在本文的例子中,將使用下面這個基本的XML文檔:

<?XML version="1.0" encoding="utf-8" ?>
<sites>
<website>
<name type="Application Development">Builder.com</name>
<link>www.builder.com</link>
</website>
<website>
<name type="Information Technology">TechRepublic</name>
<link>www.techrepublic.com</link>
</website>
<website>
<name type="Technology News">News.com</name>
<link>www.news.com</link>
</website>
</sites>

假定上述XML存儲在一個本地文件中,例如C:\builder.XML,你可用以下VB.Net代碼為其指派一個XPathNavigator對象:

Dim xpathDoc As XPathDocument
Dim XMLNav As XPathNavigator
Try
xpathDoc = New XPathDocument("c:\builder.XML")
xmlNav = XMLDoc.CreateNavigator()
Catch ex As XPathException
System.Console.WriteLine("XMLException: " + ex.Message)
Catch ex As Exception
System.Console.WriteLine("Exception: " + ex.Message)
End Try

注意,用於訪問XML文檔的代碼封閉在一個try/catch塊中,以便處理可能發生的任何運行時異常。另外要注意,你需要包括以下命名空間,以便在自己的代碼中利用XML類:

imports System.XML.XPath

該命名空間允許你直接使用需要的類,而不必包括完全限定名稱。除了迄今為止用到的類之外,在處理XML數據時還要用到XPathNodeIterator和XPathExpression類。

XML數據導航

XPathNodeIterator類包括以下用於遍歷XML文檔的方法:

  • MoveTo——轉到XML文檔內的一個特定節點
  • MoveToNext——轉到下一個同輩節點,當前節點用作基節點
  • MoveToPrevious——轉到上一個同輩節點,當前節點用作基節點
  • MoveToRoot——轉到XML文檔的根節點
  • MoveToParent——轉到當前節點的父節點

以下示范代碼展示了如何運用這些方法:

Dim xpathDoc As XPathDocument
Dim XMLNav As XPathNavigator
Dim XMLNI As XPathNodeIterator
xpathDoc = New XPathDocument("c:\builder.XML")
XMLNav = xpathDoc.CreateNavigator()
xmlNI = XMLNav.Select("/sites/website")
While (XMLNI.MoveNext())
System.Console.WriteLine(xmlNI.Current.Name + " : " + XMLNI.Current.Value)
End While

上述代碼遍歷由XPath表達式(例如/sites/website)返回的所有節點。表達式返回所有website節點,並將sites節點當作父節點(也就是根節點)。MoveNext方法可由XPathNodeIterator基類使用,但前面列出的其他方法要求一個節點作為起點。當前節點是用XPathNodeIterator類的Current屬性來訪問的。
以下示范代碼對上例進行了擴展,它使用MovePrevious方法在初始循環之後反向遍歷節點列表:

Dim xpathDoc As XPathDocument
Dim XMLNav As XPathNavigator
Dim XMLNI As XPathNodeIterator
xpathDoc = New XPathDocument("c:\builder.XML")
XMLNav = xpathDoc.CreateNavigator()

xmlNI = XMLNav.Select("/sites/website")
While (XMLNI.MoveNext())
System.Console.WriteLine(xmlNI.Current.Name + " : " + XMLNI.Current.Value)
End While
Do
System.Console.WriteLine(xmlNI.Current.Name + " : " + XMLNI.Current.Value)
Loop While (XMLNI.Current.MoveToPrevious())

可用其他方法在搜索結果中遍歷。除此之外,可利用大量屬性來確定一個節點的特征。下面進行了簡要總結:

  • HasAttributes——指明一個節點是否具有Attributes的布爾值
  • HasChildren——指明一個節點是否有子節點的布爾值
  • IsEmptyElement——指明當前節點是否為空的布爾值
  • Name——當前節點的名稱
  • NodeType——節點類型
  • Value——與節點對應的文本值

以下代碼利用上述2個屬性來確定節點的特征:

While (XMLNI.MoveNext())
If Not (XMLNI.Current.IsEmptyElement) Then
System.Console.WriteLine(xmlNI.Current.Name + " : " + XMLNI.Current.Value)
End If
If Not (XMLNI.Current.HasAttribute) Then
// work with attributes
End If
End While

當然,使用XPath可以輕松地操縱節點。以下表達式將返回具有特定Attribute值的節點:

/sites/website[@Type="Technology News"]

定位所需數據

XPath規范簡化了XML文檔導航,本文的例子證明它極易上手。


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved