.NET: Datums-, Zahl- und boolesche Werte in einem XML-Dokument nach dem W3C-Standard lesen und schreiben

Arbeitet man oft mit XML-Dokumenten stellt der System.Xml-Namespace einige nützliche Methoden für die Formatierung und das Parsing bereit. Gerade Datums-, Zahl- und boolesche Werte sollten in XML-Dokumenten so gespeichert werden, wie es die XML-Schema-Empfehlung des W3C auf der Seite http://www.w3.org/TR/xmlschema-2/ vorschlägt. Daher sollten diese Datentypen wie folgt repräsentiert werden:

  • Für Datumswerte gilt demnach das an das ISO-8601-Format angelehnte Format yyyy-MM-ddThh:mm:ss, wobei das T ein fester Trenner zwischen Datums- und Zeit-Teil ist. Die Zeitzone kann als UTC in Form des Buchstabens Z oder als Offset zu UTC in der Form +hh:mm oder -hh:mm angehängt sein
  • Für Zahlwerte gilt das englische Format mit dem Punkt als Dezimaltrennzeichen
  • Bei Fließkommawerten sind zusätzlich die wissenschaftliche Schreibweise und die speziellen Werte +0, -0, INF, -INF und NaN möglich
  • Boolesche Werte werden als 0, 1, true oder false angegeben

Die Methoden in der XmlConvert-Klasse behandeln die Nuancen der XML-Formatierung ohne spezielle Format-Strings. Zum Beispiel wird der boolesche Wert true in XML als „true“ repräsentiert und nicht als „True“. Intern verwendet das .NET Framework die XmlConvert-Klasse ausgiebig, die sich auch sehr gut für die allgemeine kulturunabhängige Serialisierung eignet.

Die Methoden für die Formatierung in der XmlConvert-Klasse sind alle als Überladung der ToString-Methode implementiert. Die Methoden für das Parsen nennen sich alle ToBoolean, ToDateTime, usw.

Hier mal ein Beispiel:

Die Methoden für die Konvertierung von DateTime-Werte akzeptieren als Parameter einen Wert der XmlDateTimeSerializationMode-Enumeration. Das ist einer der folgenden Werte:

  • Unspecified
  • Local
  • Utc
  • RoundtripKind

Das oben gezeigte Programm erzeugt den folgenden Output:

XmlConvert_DateTime

Die anderen Methoden innerhalb der XmlConvert-Klasse funktionieren ähnlich und daher gehe ich hier jetzt nicht auf weitere Details ein.

leave your comment

Fork me on GitHub