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


Чтение атрибутов

Обновлен: November 2007

Класс XmlReader содержит различные методы и свойства для считывания атрибутов. Атрибуты чаще всего находятся в элементах. Однако они также допустимы в узлах XML-деклараций и узлах типа документа.

Считывание атрибутов в элементах

Если модуль чтения расположен на узле элемента, методы MoveToAttribute позволяют пройти по списку атрибутов этого элемента. После вызова метода MoveToAttribute свойства узла (такие как Name, NamespaceURI, Prefix и т. д.) отражают свойства этого атрибута, а не элемента, к которому принадлежит атрибут.

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

Имя элемента

Описание

AttributeCount

Возвращает число атрибутов в элементе.

GetAttribute

Возвращает значение атрибута.

HasAttributes

Возвращает значение, показывающее, имеются ли атрибуты у текущего узла.

IsDefault

Возвращает значение, показывающее, является ли текущий узел атрибутом, который был создан из значения по умолчанию, определенного в определении DTD или в схеме.

Item

Возвращает значение указанного атрибута.

MoveToAttribute

Переходит к указанному атрибуту.

MoveToElement

Переходит к элементу, которому принадлежит текущий узел атрибута.

MoveToFirstAttribute

Переходит к первому атрибуту.

MoveToNextAttribute

Переходит к следующему атрибуту.

ReadAttributeValue

Выполняет синтаксический анализ значения атрибута, получая один или несколько узлов Text, EntityReference или EndEntity.

Для обработки атрибутов можно использовать и любые обычные методы и свойства объекта XmlReader. Например, если объект XmlReader расположен на атрибуте, свойства Name и Value будут отражать значения этого атрибута. Также можно использовать любые методы Read содержимого, чтобы получить значение атрибута.

Считывание атрибутов в узлах других типов

Обработка атрибутов в узлах элементов является самым распространенным случаем. Атрибуты также могут содержаться в XML-декларациях и декларациях типа документа.

by2bd43b.alert_note(ru-ru,VS.90).gifПримечание.

Если XmlReader расположен на узле инструкций по обработке, свойство Value возвращает текстовое содержимое целиком. Элементы в узле инструкций по обработке не считаются атрибутами. Их нельзя считывать методами GetAttribute и MoveToAttribute.

Узел XML-декларации

Если модуль чтения расположен в узле XML-декларации, то в свойстве Value возвращается версия, изолированные данные и сведения о кодировке в виде одной строки. В некоторых модулях чтения версия, изолированные данные и сведения о кодировке также могут представляться в виде атрибутов.

by2bd43b.alert_note(ru-ru,VS.90).gifПримечание.

Объекты XmlReader, созданные методом Create, классы XmlTextReader и XmlValidatingReader представляют элементы версии изолированных данных и сведений о кодировке в виде атрибутов.

Узел типа документа

Если объект XmlReader расположен на узле типа документа, можно использовать метод GetAttribute и свойство Item, чтобы вернуть значения для литералов SYSTEM и PUBLIC. Например, вызов метода reader.GetAttribute("PUBLIC") возвращает значение PUBLIC.

Примеры

В следующем примере считываются все атрибуты элемента с помощью свойства AttributeCount.

' Display all attributes.
If reader.HasAttributes Then
  Console.WriteLine("Attributes of <" + reader.Name + ">")
  Dim i As Integer
  For i = 0 To (reader.AttributeCount - 1)
    Console.WriteLine("  {0}", reader(i))
  Next i
  ' Move the reader back to the element node.
  reader.MoveToElement() 
End If
// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement(); 
}

В следующем примере считываются все атрибуты элемента с помощью метода MoveToNextAttribute в цикле While.

If reader.HasAttributes Then
  Console.WriteLine("Attributes of <" + reader.Name + ">")
  While reader.MoveToNextAttribute()
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value)
  End While
  ' Move the reader back to the element node.
  reader.MoveToElement()
End If
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}

В следующем примере возвращается значение атрибута по его имени.

reader.ReadToFollowing("book")
Dim isbn As String = reader.GetAttribute("ISBN")
Console.WriteLine("The ISBN value: " + isbn)
reader.ReadToFollowing("book");
string isbn = reader.GetAttribute("ISBN");
Console.WriteLine("The ISBN value: " + isbn);

См. также

Основные понятия

Чтение XML с помощью XmlReader