Навигация по XML с помощью класса XPathNavigator с помощью Visual Basic
В этой статье описаны некоторые примеры шагов и пример кода для навигации по XML с помощью XPathNavigator
класса в Visual Basic 2005 или Visual Basic .NET.
Исходная версия продукта: Visual Basic 2005, Visual Basic .NET
Исходный номер базы знаний: 301111
Сводка
В этой пошаговой статье показано, как перемещаться по документам XML с XPathNavigator
помощью объекта, созданного XPathDocument
из объекта . Этот пример загружает XPathDocument
объект с XML-данными, создает XPathNavigator
объект в виде представления данных и отображает XML-код путем обхода документа.
Версию этой статьи для Microsoft Visual C# см. в статье Использование Visual C# для навигации по XML-документам с помощью класса XPathNavigator.
Требования
В следующем списке описаны рекомендуемые оборудование, программное обеспечение, сетевая инфраструктура и пакеты обновления.
- Windows Server 2003, Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server или Windows NT 4.0 Server
- Visual Studio 2005 или Visual Studio .NET
В этой статье предполагается, что вы знакомы со следующими разделами:
- Терминология XML
- Создание и чтение XML-файлов
- Синтаксис языка XML-пути (XPath)
Использование класса XPathNavigator для навигации по XML
В Visual Studio 2005 или Visual Studio. NET, создайте консольное приложение Visual Basic 2005 или Visual Basic .NET.
Примечание.
В этом примере используется файл с именем Books.xml. Вы можете создать собственный файлBooks.xml или использовать пример, включенный в краткие руководства по пакету SDK для .NET. Если у вас установлены краткие руководства, Books.xml находится в папке :
\Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
Кроме того, этот файл можно получить, перейдя в раздел Пример XML-файла (books.xml).
Необходимо скопировать Books.xml в папку
\Bin\Debug
, расположенную под папкой, в которой был создан этот проект.Убедитесь, что проект ссылается на
System.Xml
пространство имен.Используйте инструкцию
Imports
вXml
пространствах имен иXPath
, чтобы не требовалось определять объявления в этих пространствах имен позже в коде. Оператор необходимо использоватьImports
перед любыми другими объявлениями.Imports System.Xml Imports System.Xml.XPath
Объявите соответствующие переменные. Объявите
XPathDocument
объект для хранения XML-документа и объект для оценки выраженийXPathNavigator
XPath и перемещения по документу. Объявите объект String для хранения выражения XPath. Добавьте код объявления в процедуру Main в модуле Module1.Dim nav As XPathNavigator Dim docNav As XPathDocument
XPathDocument
Загрузите объект с примером файлаBooks.xml
. КлассXPathDocument
использует расширяемые преобразования языка таблиц стилей (XSLT), чтобы обеспечить быстрый и ориентированный на производительность кэш для обработки XML-документов. Она похожа на объектную модель xml-документов (DOM), но хорошо оптимизирована для обработки XSLT и модели данных XPath.'Open the XML. docNav = New XPathDocument("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
с источником вы переходите от корневого документа к дочерним элементам, разделуComment
и узлу Bookstore.'Move to the first child node (comment field). nav.MoveToFirstChild()
Используйте метод для
MoveToNext
итерации узлов на уровне одноуровневого уровня. МетодMoveToNext
перемещается в следующий одноуровневый элемент текущего узла.'Loop through all the root nodes. Do ... Loop While nav.MoveToNext
NodeType
Используйте свойство , чтобы убедиться, что обрабатываются только узлы элементов, а свойство —Value
для отображения текстового представления элемента.Do 'Find the first element. If nav.NodeType = XPathNodeType.Element Then 'If children exist. If nav.HasChildren Then '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) Loop While nav.MoveToNext End If End If Loop While nav.MoveToNext
Используйте свойство ,
HasAttributes
чтобы определить, имеет ли узел какие-либо атрибуты. Вы также можете использовать другие методы, напримерMoveToNextAttribute
, для перемещения к атрибуту и проверки его значения.Примечание.
Этот сегмент кода проходит только по потомкам корневого узла, а не по всему дереву.
Do 'Find the first element. If nav.NodeType = XPathNodeType.Element Then 'if children exist If nav.HasChildren Then '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 Then Console.WriteLine("This node has attributes") End If Loop While nav.MoveToNext End If End If Loop While nav.MoveToNext
ReadLine
Используйте метод объекта ,Console
чтобы добавить паузу в конце экрана консоли, чтобы быстрее отобразить приведенные выше результаты.'Pause. Console.ReadLine()
Создайте и запустите проект консольного приложения.
Полный список кода
Imports System.Xml
Imports System.Xml.XPath
Module Module1
Sub Main()
Dim nav As XPathNavigator
Dim docNav As XPathDocument
docNav = New XPathDocument("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 Then
'if children exist
If nav.HasChildren Then
'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 Then
Console.WriteLine("This node has attributes")
End If
Loop While nav.MoveToNext
End If
End If
Loop While nav.MoveToNext
'Pause.
Console.ReadLine()
End Sub
End Module
Ссылки
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по