Чтение атрибутов
Обновлен: November 2007
Класс XmlReader содержит различные методы и свойства для считывания атрибутов. Атрибуты чаще всего находятся в элементах. Однако они также допустимы в узлах XML-деклараций и узлах типа документа.
Считывание атрибутов в элементах
Если модуль чтения расположен на узле элемента, методы MoveToAttribute позволяют пройти по списку атрибутов этого элемента. После вызова метода MoveToAttribute свойства узла (такие как Name, NamespaceURI, Prefix и т. д.) отражают свойства этого атрибута, а не элемента, к которому принадлежит атрибут.
В следующей таблице описываются методы и свойства, предназначенные специально для обработки атрибутов.
Имя элемента |
Описание |
---|---|
Возвращает число атрибутов в элементе. |
|
Возвращает значение атрибута. |
|
Возвращает значение, показывающее, имеются ли атрибуты у текущего узла. |
|
Возвращает значение, показывающее, является ли текущий узел атрибутом, который был создан из значения по умолчанию, определенного в определении DTD или в схеме. |
|
Возвращает значение указанного атрибута. |
|
Переходит к указанному атрибуту. |
|
Переходит к элементу, которому принадлежит текущий узел атрибута. |
|
Переходит к первому атрибуту. |
|
Переходит к следующему атрибуту. |
|
Выполняет синтаксический анализ значения атрибута, получая один или несколько узлов Text, EntityReference или EndEntity. |
Для обработки атрибутов можно использовать и любые обычные методы и свойства объекта XmlReader. Например, если объект XmlReader расположен на атрибуте, свойства Name и Value будут отражать значения этого атрибута. Также можно использовать любые методы Read содержимого, чтобы получить значение атрибута.
Считывание атрибутов в узлах других типов
Обработка атрибутов в узлах элементов является самым распространенным случаем. Атрибуты также могут содержаться в XML-декларациях и декларациях типа документа.
Примечание. |
---|
Если XmlReader расположен на узле инструкций по обработке, свойство Value возвращает текстовое содержимое целиком. Элементы в узле инструкций по обработке не считаются атрибутами. Их нельзя считывать методами GetAttribute и MoveToAttribute. |
Узел XML-декларации
Если модуль чтения расположен в узле XML-декларации, то в свойстве Value возвращается версия, изолированные данные и сведения о кодировке в виде одной строки. В некоторых модулях чтения версия, изолированные данные и сведения о кодировке также могут представляться в виде атрибутов.
Примечание. |
---|
Объекты 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);