Запись атрибутов
Методы WriteAttributeString, WriteStartAttribute и WriteAttributes предназначены специально для создания атрибутов. С помощью этих методов можно производить запись атрибутов в узлы элементов. Методы записи атрибутов также можно использовать для создания деклараций пространств имен в элементе. Дополнительные сведения см. в разделе Обработка пространств имен в XmlWriter.
WriteAttributeString
Метод WriteAttributeString является самым простым способом записать атрибут. Он используется для записи узла атрибута целиком, включая строковое значение. Следующий код добавляет атрибут (supplierID) и значение (A23-1) в XML-элемент (Product):
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(Console.Out, settings)
writer.WriteStartElement("Product")
writer.WriteAttributeString("supplierID", "A23-1")
writer.WriteElementString("ProductID", "12345")
writer.WriteEndElement()
End Using
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
{
writer.WriteStartElement("Product");
writer.WriteAttributeString("supplierID", "A23-1");
writer.WriteElementString("ProductID", "12345");
writer.WriteEndElement();
}
Вышеприведенный код выводит на консоль следующие данные.
<Product supplierID="A23-1">
<ProductID>12345</ProductID>
</Product>
WriteStartAttribute
Метод WriteStartAttribute является расширенной версией метода WriteAttributeString. Он позволяет записать значение атрибута с помощью вызовов нескольких методов. Например, можно использовать метод WriteValue для записи типизированного значения.
Атрибут закрывается вызовом метода WriteEndAttribute.
В следующем коде hireDate является объектом DateTime, который содержит дату приема сотрудника на работу. Код записывает атрибут review-date, который содержит вычисленное значение даты завершения 6-месячного испытательного периода работы для сотрудника.
Dim hireDate As New DateTime(2008, 5, 20)
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(Console.Out, settings)
writer.WriteStartElement("Employee")
writer.WriteStartAttribute("review-date")
writer.WriteValue(hireDate.AddMonths(6))
writer.WriteEndAttribute()
writer.WriteElementString("EmployeeID", "12345")
writer.WriteEndElement()
End Using
DateTime hireDate = new DateTime(2008, 5, 20);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
{
writer.WriteStartElement("Employee");
writer.WriteStartAttribute("review-date");
writer.WriteValue(hireDate.AddMonths(6));
writer.WriteEndAttribute();
writer.WriteElementString("EmployeeID", "12345");
writer.WriteEndElement();
}
Вышеприведенный код выводит на консоль следующие данные.
<Employee review-date="2008-11-20T00:00:00">
<EmployeeID>12345</EmployeeID>
</Employee>
WriteAttributes
Метод WriteAttributes позволяет скопировать все атрибуты, найденные в текущей позиции переданного объекта XmlReader. Работа метода WriteAttributes зависит от типа узла, на который в данный момент позиционирован модуль чтения.
В следующей таблице описаны результаты вызова метода WriteAttributes для каждого типа узла. Если модуль чтения расположен на узле, тип которого не перечислен в следующей таблице, метод WriteAttributes не выполняет никаких действий.
Тип узла |
Поведение метода WriteAttributes |
---|---|
Атрибут |
Записывает текущий атрибут, а затем остальные атрибуты, пока не будет обнаружен закрывающий тег элемента. |
Элемент |
Записывает все атрибуты, содержащиеся в элементе. |
XML-декларация |
Записывает все атрибуты в декларации. |
Например, в следующем коде модуль записи копирует все атрибуты, обнаруженные в текущей позиции модуля чтения, в модуль записи.
Dim reader As XmlReader = XmlReader.Create("book.xml")
reader.ReadToDescendant("book")
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(Console.Out, settings)
writer.WriteStartElement("root")
writer.WriteAttributes(reader, True)
writer.WriteEndElement()
End Using
XmlReader reader = XmlReader.Create("book.xml");
reader.ReadToDescendant("book");
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
{
writer.WriteStartElement("root");
writer.WriteAttributes(reader, true);
writer.WriteEndElement();
}
В коде используется следующий XML-файл примера (book.xml):
<?xml version="1.0" ?>
<book genre="autobiography"
publicationdate="1981"
ISBN="1-861003-11-0">Book Title</book>
Вышеприведенный код выводит на консоль следующие данные.
<root genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0" />