2010-06-30 3 views
5

mi piace creare XML utilizzando la seguente formattazione:StyleCop felice creazione di XML utilizzando XDocument/XElement/XAttribute

XDocument xml = new XDocument(
    new XElement("Root", 
     new XElement("A", 
     new XAttribute("X", xValue), 
     new XAttribute("Y", yValue)), 
     new XElement("B", 
     new XAttribute("Z", zValue)), 
     new XElement("C"))); 

Sembra facile da leggere e un pò scorre come un documento XML a schede (a mio parere). StyleCop però è molto insoddisfatto della formattazione. Ottengo molti di questi errori:

SA1116: Se i parametri del metodo sono su righe separate, il primo parametro deve iniziare sulla riga sotto il nome del metodo.

SA1118: il parametro si estende su più righe. Se il parametro è breve, posizionare l'intero parametro su una singola riga. Altrimenti, salva il contenuto del parametro in una variabile temporanea e passa la variabile temporanea come parametro.

Cosa posso fare per mantenere StyleCop felice e il codice leggibile? So che posso disabilitare le regole di StyleCop, ma il team vorrebbe mantenere quelle regole per tutto il codice di creazione non XML. Posso sopprimere selettivamente la regola in ogni metodo che crea XML in questo modo, ma sembra un dolore e diventa brutto. Eventuali suggerimenti?

+0

Purtroppo, ho finito per sopprimerlo. : <[System.Diagnostics.CodeAnalysis.SuppressMessage ("StyleCop.CSharp.ReadabilityRules", "SA1118: ParameterMustNotSpanMultipleLines", Motivazione = "Revisionato.")] – granadaCoder

risposta

2

Sì, vorrei suggerire quanto segue:

  • Crea 'risorse di default' per il vostro progetto (tasto destro del mouse il progetto, Proprietà, di risorse)
  • Creare una nuova risorsa di tipo stringa lì, impostare il nome come DefaultXmlDoc o qualcosa
  • Impostare il valore come il seguente testo:
    <Root>
    <A X="1" Y="2" />
    <B Z="3" />
    <C />
    </Root>
  • modificare il programma al seguente one-liner:
    XDocument xml = XDocument.Parse(Properties.Resources.DefaultXmlDoc);

Credo che questo compia tutti i tuoi obiettivi.

+0

Beh, sembra che funzioni, suppongo che avrei dovuto essere un un po 'più chiaro però. Creo xml in molti punti del codice e quasi sempre ci sono dati dinamici al suo interno. Se avessi usato una stringa di risorse, avrei finito per dover fare un mucchio di sostituzioni di valori segnaposto con i valori reali. A quel punto, la cura potrebbe essere peggiore della malattia ... – Tallek

+0

Garantisco, funziona. Il modo per gestire i valori di sostituzione dinamici è posizionando un {0} nella stringa di risorse e quindi avvolgendo il recupero della stringa di risorse con una piccola routine che esegue un String.Format sulla stringa di risorse con argomenti aggiuntivi. Ho usato questo metodo da solo e (con la corretta implementazione) è stato assolutamente meraviglioso lavorare con. Tutte le mie grandi stringhe hardcoded con un paio di valori dinamici al loro interno sono completamente gestite da un piccolo sistema di "pre-elaborazione delle stringhe". Se c'è un modo migliore, mi piacerebbe saperlo. – Task

+0

@Task e per quanto riguarda l'escape o l'ordine di elementi? La creazione in stile XDocument è eccezionale in particolare perché non devi preoccuparti di tutte queste cose. Se alcune stringhe contengono caratteri speciali XML, non ti interessa. Se devi spostare qualche elemento, lo fai semplicemente (senza dover ripensare a tutti questi numeri '{0}'). Se è necessario inserire un altro XElement anziché la stringa, basta farlo. Tutte queste attività diventano molto più difficili quando si lavora con le stringhe. – penartur