Использование 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. Этот файл также доступен для скачивания; См. первый элемент в разделе Ссылки этой статьи, чтобы получить сведения о расположении скачивания.
Скопируйте файлBooks.xml в папку
\Inetpub\Wwwroot
на компьютере.Откройте Visual Studio.
Создайте консольное приложение Visual C#. Вы можете перейти к разделу Полный список кода или выполнить следующие действия, чтобы создать приложение.
Укажите директиву using для
System.Xml
пространства имен, чтобы не требовалось указыватьXmlTextReader
объявления классов позже в коде. Директиву using необходимо использовать перед любыми другими объявлениями.using System.Xml;
Получите XML-поток с помощью URL-адреса. Потоки используются для обеспечения независимости от устройства; Таким образом, изменения программы не требуются, если изменяется источник потока. Объявите константу
http://localhost/books.xml
для URL-адреса. На следующем шаге вы будете использовать константу сXmlTextReader
. Добавьте следующий пример кода в процедуру main класса по умолчанию:String URLString = "http://localhost/books.xml";
Создайте экземпляр
XmlTextReader
класса и укажите URL-адрес. Как правило, используется,XmlTextReader
если требуется доступ к XML-файлу в качестве необработанных данных без затрат на модель DOM; таким образом,XmlTextReader
предоставляет более быстрый механизм чтения XML- кода. КлассXmlTextReader
имеет различные конструкторы для указания расположения XML-данных. Следующий код создает экземплярXmlTextReader
объекта и передает КОНСТРУКТОРу URL-адрес:XmlTextReader reader = new XmlTextReader (URLString);
Чтение XML-кода.
Примечание.
На этом шаге показан базовый внешний
while
цикл, а в следующих двух шагах описывается использование этого цикла и чтение XML.После загрузки выполняет последовательные операции чтения для
XmlTextReader
перемещения между XML-данными и используетRead
метод для получения следующей записи. ЕслиRead
записей больше нет, метод возвращает значение false.while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();
Проверьте узлы. Для обработки 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; } }
Проверьте атрибуты. Типы узлов элементов могут включать список связанных с ними узлов атрибутов. Метод
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; } }
Выполните сборку и запуск проекта.
Полный список кода
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 .