Запись типизированных данных
Класс XmlWriter позволяет записывать типизированные данные. Метод WriteValue принимает значения среды CLR простых типов. Эта возможность удобна при работе с простыми типами среды CLR и экземпляром XmlWriter. Для записи типизированного значения можно вызвать метод WriteValue вместо преобразования типизированных данных в строковое значение перед записью с помощью методов класса XmlConvert.
Запись типизированных значений
Метод WriteValue принимает объект CLR и преобразует входное значение в нужный тип вывода с применением правил преобразования типов данных языка XSD. Если объект CLR принадлежит к типу списка, например IEnumerable, IList или ICollection, то он обрабатывается как массив типа значения.
При вызове метода WriteValue XmlWriter преобразует значение в строковое представление в соответствии с правилами типа данных XSD и записывает его с помощью метода WriteString.
Запись в текстовом формате
При вызове WriteValue типизированное значение сериализуется в текст с применением правил XmlConvert для данного типа схемы.
Тип CLR |
Тип данных схемы XML (XSD) по умолчанию |
---|---|
System.Boolean |
xsd:boolean |
System.Byte** |
xsd:integer |
System.Byte[] |
xsd:base64Binary |
System.Char** |
xsd:string |
System.DateTime |
xsd:dateTime |
System.Decimal |
xsd:decimal |
System.Double |
xsd:double |
System.Int16** |
xsd:integer |
System.Int32 |
xsd:integer |
System.Int64 |
xsd:integer |
System.Single |
xsd:float |
System.String |
xsd:string |
System.IO.TextReader |
xsd:string |
System.IO.BinaryReader |
xsd:base64Binary |
**Эти типы не совместимы с CLS. У них нет соответствующего метода в классе XmlReader.
Примечание |
---|
Если WriteValue вызывается несколько раз подряд, то значения не разделяются пробелом.Для вставки пробела необходимо вызывать метод WriteWhitespace между вызовами WriteValue. |
Запись в хранилище XML-данных
Класс XmlWriter можно использовать для записи в хранилище XML-данных. Например, класс XPathNavigator может создать объект XmlWriter для создания узлов для объекта XmlDocument.
При наличии сведений схемы хранилища данных метод WriteValue вызывает исключение, если при вызове WriteValue происходит попытка преобразовать запрещенный тип.
Если для хранилища данных нет информационной схемы, то метод WriteValue обрабатывает все значения как тип xsd:anySimpleType.
Пример
В следующем примере цена книги повышается на 15 процентов перед записью. Сведения схемы извлекаются из модуля чтения, который представляет собой проверяющий объект XmlReader.
reader.ReadToDescendant("price")
writer.WriteStartElement("price")
writer.WriteValue(reader.ReadElementContentAsDouble() * 1.15)
writer.WriteEndElement()
reader.ReadToDescendant("price");
writer.WriteStartElement("price");
writer.WriteValue((reader.ReadElementContentAsDouble()) * 1.15);
writer.WriteEndElement();