Поделиться через


Использование Visual C# для навигации XML-документов с классом XPathNavigator

В этой статье описывается, как перемещать XML-документы с XPathNavigator объектом, созданным XPathDocument из объекта.

Исходная версия продукта: Visual C#
Исходный номер базы знаний: 308343

Итоги

Этот пример загружает XPathDocument объект с XML-данными, создает XPathNavigator объект в виде представления данных и отображает XML, проходя по документу.

В этой статье рассматриваются следующие пространства имен библиотеки классов Microsoft платформа .NET Framework:

  • System.Xml
  • System.Xml.XPath

Сведения о версии .NET в Microsoft Visual Basic см. в статье о том, как перейти к XML с помощью класса XPathNavigator с помощью Visual Basic.

Требования

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Visual C#
  • Терминология XML
  • Создание и чтение XML-файла
  • Синтаксис языка XML-пути (XPath)

Использование класса XPathNavigator для навигации по XML

  1. Создайте консольное приложение Visual C# в Visual Studio.

    Примечание.

    В этом примере используется файл с именем 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. Используйте инструкцию using в Xml пространствах имен и XPath пространствах имен, чтобы не требуется квалифицировать объявления в этих пространствах имен позже в коде. Инструкцию using можно использовать перед любыми другими объявлениями следующим образом:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Объявите соответствующие переменные. Объявите XPathDocument объект для хранения XML-документа и объекта для оценки XPath выражений и XPathNavigator перемещения по документу. Объявите объект для String хранения XPath выражения. Добавьте код объявления в процедуру Main в Module1.

    XPathNavigator nav;
    XPathDocument docNav;
    
  5. XPathDocument Загрузите объект с помощью примера файла Books.xml. Класс 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. ReadLine Используйте метод Console объекта, чтобы добавить паузу в конце экрана консоли, чтобы легко отобразить приведенные выше результаты.

    //Pause.
    Console.ReadLine();
    
  13. Создайте и запустите проект 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();

            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();
        }
    }
}

Устранение неполадок

При тестировании кода может появиться следующее сообщение об ошибке исключения:

Необработанное исключение типа System.Xml.XmlException произошло в system.xml.dll
Дополнительные сведения: непредвиденное объявление XML. Объявление XML должно быть первым узлом в документе, и перед ним не могут отображаться символы пробелов. Строка 1, позиция

Ошибка исключения возникает в следующей строке кода:

docNav = new XPathDocument("c:\\books.xml");

Чтобы устранить ошибку, удалите символы пробелов, предшествующие первому узлу в документе books.xml.

Ссылки