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


Использование Visual C# для чтения XML-данных из URL-адреса

В этой статье показано, как использовать XmlTextReader класс для чтения XML из URL-адреса. Потоковая информация может поступать из всех видов источников, таких как поток байтов с сервера, файла или TextReader класса.

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

Требования

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

  • Microsoft Visual Studio
  • Терминология XML
  • Создание и чтение XML
  • URL-адреса и создание конечной точки XML

Эта статья относится к пространству System.Xmlимен библиотеки классов платформа .NET Framework.

Чтение XML-данных из URL-адреса

В этом примере используется файл с именем Books.xml. Вы можете создать собственный файл Books.xml или использовать пример файла, который входит в краткие руководства по пакету средств разработки программного обеспечения .NET (SDK). Этот файл также доступен для скачивания; См. первый элемент в разделе "Ссылки" этой статьи для расположения скачивания.

  1. Скопируйте файл Books.xml в папку \Inetpub\Wwwroot на компьютере.

  2. Откройте Visual Studio.

  3. Создайте консольное приложение Visual C# . Вы можете перейти к разделу "Полный список кода" или продолжить эти действия, чтобы создать приложение.

  4. Укажите директиву using в System.Xml пространстве имен, чтобы не требуется квалифицировать XmlTextReader объявления классов позже в коде. Перед любыми другими объявлениями необходимо использовать директиву using.

    using System.Xml;
    
  5. Получение XML-потока с помощью URL-адреса. Потоки используются для обеспечения независимости от устройства; Таким образом, изменения программы не требуются, если источник потока изменяется. Объявите константу для http://localhost/books.xml URL-адреса. Константы будут использоваться на следующем шаге XmlTextReader. Добавьте следующий пример кода в основную процедуру класса по умолчанию:

    String URLString = "http://localhost/books.xml";
    
  6. Создайте экземпляр XmlTextReader класса и укажите URL-адрес. Как правило, используется, XmlTextReader если требуется получить доступ к XML в виде необработанных данных без затрат на объектную модель документа (DOM). Таким образом, XmlTextReader предоставляется более быстрый механизм чтения XML. Класс XmlTextReader имеет разные конструкторы, чтобы указать расположение XML-данных. Следующий код создает экземпляр XmlTextReader объекта и передает URL-адрес конструктору:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Считывает XML-код.

    Примечание.

    На этом шаге показан базовый, внешний while цикл и следующие два шага описывают использование этого цикла и чтения XML.

    После загрузки XmlTextReader выполняет последовательные операции чтения для перемещения по XML-данным и использует метод для получения следующей Read записи. Метод Read возвращает значение false, если больше записей нет.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Проверьте узлы. Для обработки XML-данных каждая запись имеет тип узла, который можно определить из NodeType свойства. Value Свойства Name возвращают имя узла (имена элементов и атрибутов) и значение узла (текст узла) текущего узла (или запись). Перечисление NodeType определяет тип узла. В следующем примере кода отображается имя элементов и тип документа.

    Примечание.

    В этом примере игнорируется атрибуты элементов.

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
                Console.WriteLine(">");
                break;
    
            case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
    
            case XmlNodeType.EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  9. Проверьте атрибуты. Типы узлов элементов могут содержать список узлов атрибутов, связанных с ними. Метод MovetoNextAttribute последовательно перемещается по каждому атрибуту элемента. HasAttributes Используйте свойство, чтобы проверить, имеет ли узел какие-либо атрибуты. Свойство AttributeCount возвращает количество атрибутов для текущего узла.

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read the attributes.
                    Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                Console.Write(">");
                Console.WriteLine(">");
                break;
            case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
            case XmlNodeType. EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  10. Выполните сборку проекта и запустите его.

Полный листинг кода

using System;
using System.Xml;

namespace ReadXMLfromURL
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Read the attributes.
                            Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                        Console.Write(">");
                        Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine (reader.Value);
                        break;
                    case XmlNodeType. EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
        }
    }
}

Пример полученных результатов

<bookstore>
    <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
        <title>
        The Autobiography of Benjamin Franklin
        </title>
        <author>
            <first-name>
            Benjamin
            </first-name>
            <last-name>
            Franklin
            </last-name>
        </author>
        <price>
        8.99
        </price>
    </book>
    <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">>
        <title>
        The Confidence Man
        </title>
        <author>
            <first-name>
            Herman
            </first-name>
            <last-name>
            Melville
            </last-name>
        </author>
        <price>
        11.99
        </price>
    </book>
    <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
        <title>
        The Gorgias
        </title>
        <author>
            <name>
            Plato
            </name>
        </author>
        <price>
        9.99
        </price>
    </book>
</bookstore>

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

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

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

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

while (reader.Read())

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

Ссылки