Scrittura di dati tipizzati
La classe XmlWriter consente di scrivere dati tipizzati. Il metodo WriteValue accetta i valori di tipo semplice CLR (Common Language Runtime). Questa funzionalità è utile quando si utilizzano tipi semplici CLR e un'istanza XmlWriter. È possibile chiamare il metodo WriteValue per scrivere il valore tipizzato, anziché utilizzare i metodi della classe XmlConvert per convertire i dati tipizzati in un valore di stringa prima della scrittura.
Scrittura di valori tipizzati
Il metodo WriteValue accetta un oggetto CLR e converte il valore di input nel tipo di output desiderato utilizzando le regole di conversione dei tipi di dati XSD (XML Schema Definition Language). Se l'oggetto CLR è un tipo di elenco, ad esempio IEnumerable, IList o ICollection, verrà considerato una matrice del tipo di valore.
Quando viene chiamato il metodo WriteValue, il XmlWriter converte il valore nelle relative rappresentazioni di stringa in base alle regole dei tipi di dati XSD (XML Schema) e li scrive utilizzando il metodo WriteString.
Scrittura di testo
Quando viene chiamato il WriteValue, il valore tipizzato viene serializzato come testo utilizzando le regole XmlConvert per quel tipo di schema.
Tipo CLR |
Tipo di dati XSD (XML Schema) predefinito |
---|---|
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 |
**Questi tipi non sono conformi a CLS. Non dispongono di un metodo corrispondente nella classe XmlReader.
Nota |
---|
Se WriteValue viene chiamato più volte in successione, i valori non sono delimitati da uno spazio.È necessario chiamare il metodo WriteWhitespace tra le chiamate a WriteValue per inserire uno spazio vuoto. |
Scrittura in un archivio dati XML
Il tipo XmlWriter può essere utilizzato per scrivere in un archivio dati XML. Ad esempio, la classe XPathNavigator può creare un oggetto XmlWriter e quindi creare nodi per un oggetto XmlDocument.
Se nell'archivio dati sono disponibili informazioni sullo schema, il metodo WriteValue genera un'eccezione se la chiamata WriteValue tenta di convertirlo in un tipo non consentito.
Se nell'archivio dati non sono disponibili informazioni sullo schema, il metodo WriteValue considera tutti i valori come tipo xsd:anySimpleType.
Esempio
Nell'esempio seguente il prezzo del libro viene aumentato del 15% prima della scrittura. Le informazioni sullo schema vengono ottenute dal lettore, ovvero da un oggetto di convalida 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();