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


Использование 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 или использовать пример файла, который входит в краткие руководства по пакету SDK для .NET. Этот файл также доступен для скачивания; См. первый элемент в разделе Ссылки этой статьи, чтобы получить сведения о расположении скачивания.

  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. Добавьте следующий пример кода в процедуру main класса по умолчанию:

    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 свойства . Свойства Name и Value возвращают имя узла (имена элементов и атрибутов) и значение узла (текст узла) текущего узла (или записи). Перечисление 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 .

Ссылки