2010-09-30 25 views
6

Utilizzo il .NET 4.0 Framework. Ho bisogno di scrivere un codice XML per interagire con un servizio web. I parametri passati al servizio web verranno inseriti da un utente finale.Lettura e scrittura di XML in C#

La mia domanda è, qual è l'approccio consigliato per interagire con XML in questi giorni? Sembra che con ogni versione di .NET Framework ci sia un nuovo modo di fare la stessa cosa. Ma questo non significa necessariamente che sia il migliore. Cosa consiglia la comunità in questo caso?

+0

Tutto dipende dal tipo di XML che si desidera generare. E poiché questo è specifico per i servizi Web, potresti ottenere gratuitamente la generazione XML, ad es. da WCF (anche se alla tua domanda mancano i dettagli necessari per sapere questo). –

risposta

9

Non ce n'è uno nuovo in ogni versione. Ce ne sono solo due. È un peccato che ce ne dovrebbero essere due, ma certamente non ce ne sono più di due.

Quello che raccomando è System.Xml.Linq.XDocument e le sue classi associate. Forniscono un'API pulita e utile che consente di utilizzare LINQ e i metodi di estensione Enumerable. Generare un albero XML in questa API è facile perché puoi annidare le chiamate del costruttore e ti ritroverai con un codice che assomiglia molto all'XML stesso.

Quello che non raccomando è System.Xml.XmlDocument. È vecchio ed è stato progettato per seguire i consigli del W3C per un'API XML. Di conseguenza, non ha alcun supporto per idee moderne o specifiche di C#, inclusi enumerabili e LINQ. La generazione di un albero XML in questa API è tortuosa: devi creare ogni elemento singolarmente e chiamare metodi come AppendChild per trasformarli in un albero.

+1

Non dimenticare le classi 'XPathDocument' e' XmlReader'/'XmlWriter'. E c'è anche il serializzatore XML ... –

+0

Sono completamente d'accordo - evito System.Xml.XmlDocument e imparo come usare LINQ to XML's XDocument - finirai per scrivere molto meno codice, il codice che scrivi sarà più pulito, più veloce e meno buggato e potrai riutilizzare molti degli idiomi del codice LINQ per tutto il resto del codice. –

2

Se il servizio è WCF o implementa gli standard WS- *, si dovrebbe essere in grado di aggiungere un riferimento al servizio dal progetto e interagire con esso tramite un'entità, anziché effettuare tutte le chiamate di rete e gestire il messaggi manualmente.

0

Ogni volta che devo lavorare con XML, penso per la serializzazione. Contrassegna la classe con [Serializible] e le proprietà con l'attributo corrispondente da System.Xml.Serialization e serializza semplicemente gli oggetti. Funziona solo se il formato dell'XML è sicuro ad es. puoi descrivere l'XML con le classi. Se non ti piace @Timwi ha detto che System.Xml.Linq.XDocument è la scelta migliore.

Problemi correlati