Использование 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). Этот файл также доступен для скачивания; См. первый элемент в разделе "Ссылки" этой статьи для расположения скачивания.
Скопируйте файл Books.xml в папку
\Inetpub\Wwwroot
на компьютере.Откройте Visual Studio.
Создайте консольное приложение Visual C# . Вы можете перейти к разделу "Полный список кода" или продолжить эти действия, чтобы создать приложение.
Укажите директиву using в
System.Xml
пространстве имен, чтобы не требуется квалифицироватьXmlTextReader
объявления классов позже в коде. Перед любыми другими объявлениями необходимо использовать директиву using.using System.Xml;
Получение XML-потока с помощью URL-адреса. Потоки используются для обеспечения независимости от устройства; Таким образом, изменения программы не требуются, если источник потока изменяется. Объявите константу для
http://localhost/books.xml
URL-адреса. Константы будут использоваться на следующем шагеXmlTextReader
. Добавьте следующий пример кода в основную процедуру класса по умолчанию: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
свойства.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; } }
Проверьте атрибуты. Типы узлов элементов могут содержать список узлов атрибутов, связанных с ними. Метод
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 .