2011-01-21 12 views
6

Ho bisogno di conoscere il modo ottimale di scrivere/leggere DateTime in/da xml. Dovrei scrivere direttamente DateTime in XML o DateTime.ToString() in XML.C#: Read/Write DateTime da/in XML

La seconda domanda è come leggere l'elemento date da xml. La fusione può essere usata per questo; (DateTime) rec.Element ("Data"). Valore o ho bisogno di analizzare la stringa come questo DateTime.Parse (rec.Element ("Data"). Value)

risposta

17

È possibile utilizzare colata di un XElement o XAttribute con LINQ to XML, sì ... ma non della stringa stessa. LINQ to XML utilizza il formato XML standard, indipendente dalle impostazioni di cultura.

Esempio:

using System; 
using System.Xml.Linq; 

class Test 
{  
    static void Main() 
    { 
     DateTime now = DateTime.Now; 
     XElement element = new XElement("Now", now); 

     Console.WriteLine(element); 
     DateTime parsed = (DateTime) element; 
     Console.WriteLine(parsed); 
    } 
} 

Uscita per me:

<Now>2011-01-21T06:24:12.7032222+00:00</Now> 
21/01/2011 06:24:12 
+0

La trasmissione di XElement è migliore o l'analisi del valore XElement. ?? –

+0

@Pankaj: Vorrei * sicuramente * usare le conversioni da LINQ a XML. In questo modo utilizzerà il formato standard per la memorizzazione di date/orari in XML, in modo da poter interagire in modo pulito con altro codice (possibilmente scritto in altre lingue). –

+0

Cosa intendi per conversione da Linq a XML? scusa se sono stupido ..: P ... Intendi dire che dovrei scrivere la data direttamente in XML e poi Cast the XElement .... è questo che intendi ?? –

5

Un'alternativa alla risposta di @ Jon Skeet è quello di convertire il DateTime in una stringa utilizzando il "round trip" format. Questo lo converte in un formato che salverà e caricherà senza perdere alcuna informazione.

string dataToSave = myDateTime.ToString("o"); 

E riconvertire nuovamente utilizzando DateTime.Parse(). La pagina a cui mi sono collegato ha degli esempi che mostrano come convertire in/dal formato stringa. Tutto ciò che devi fare è archiviare questa stringa nel tuo XML. Questo ti dà un maggiore controllo sul modo in cui i dati vengono archiviati (se vuoi un maggiore controllo, cioè).

+0

Più controllo, ma meno portabilità. L'XML ha modi standardizzati di memorizzare date e orari - penserei molto attentamente prima di allontanarmene deliberatamente. –

+0

@Jon: Sì, stavo cercando di indicare un modo più generalizzato di serializzare da/verso il testo senza perdita di dati, ma in realtà non l'ho messo molto bene - come dici tu, mi sono allontanato un po 'dal punto: -) –

5

È possibile utilizzare la classe XmlConvert per la conversione da e verso le stringhe.