2010-06-30 5 views
5

J'aime créer xml en utilisant le format suivant:StyleCop création heureuse de Xml en utilisant 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"))); 

Il semble facile à lire et coule un peu comme un document XML à onglets (à mon avis). StyleCop est très mécontent de la mise en forme cependant. Je reçois beaucoup de ces erreurs:

SA1116: Si les paramètres de méthode sont sur des lignes séparées, le premier paramètre doit commencer sur la ligne sous le nom de la méthode.

SA1118: Le paramètre s'étend sur plusieurs lignes. Si le paramètre est court, placez le paramètre entier sur une seule ligne. Sinon, enregistrez le contenu du paramètre dans une variable temporaire et transmettez la variable temporaire en tant que paramètre.

Que puis-je faire pour garder StyleCop heureux et le code lisible? Je sais que je peux désactiver les règles StyleCop, mais l'équipe souhaite conserver ces règles pour tout le code de création non XML. Je peux supprimer sélectivement la règle dans chaque méthode qui crée le XML de cette manière, mais cela semble être une douleur et devient moche. Aucune suggestion?

+0

Malheureusement, j'ai fini par le supprimer. : <[System.Diagnostics.CodeAnalysis.SuppressMessage ("StyleCop.CSharp.ReadabilityRules", "SA1118: ParameterMustNotSpanMultipleLines", Justification = "Révisé.")] – granadaCoder

Répondre

2

Oui, je suggère ce qui suit:

  • Créer des « ressources par défaut » pour votre projet (clic droit sur le projet, Propriétés, OUTILLÉ)
  • Créer une nouvelle ressource de chaîne là, définissez le nom comme DefaultXmlDoc ou quelque chose
  • Définir la valeur comme le texte suivant:
    <Root>
    <A X="1" Y="2" />
    <B Z="3" />
    <C />
    </Root>
  • Changer votre programme à celui-liner suivant:
    XDocument xml = XDocument.Parse(Properties.Resources.DefaultXmlDoc);

Je crois que cela accomplit tous vos objectifs.

+0

Eh bien, cela semble fonctionner, je suppose que j'aurais dû être un un peu plus clair cependant. Je crée du XML à plusieurs endroits dans le code et presque toujours, il y a des données dynamiques. Si j'utilisais une chaîne de ressources, je finirais par avoir besoin de faire un tas de remplacements de valeurs d'espace réservé avec les valeurs réelles. À ce stade, le remède pourrait être pire que la maladie ... – Tallek

+0

Je garantis, ça marche. Pour gérer les valeurs de remplacement dynamiques, placez un {0} dans la chaîne de ressources, puis encapsulez la chaîne de ressources récupérée avec une petite routine qui exécute String.Format sur la chaîne de ressource avec des arguments supplémentaires. J'ai utilisé cette méthode moi-même et (avec l'implémentation correcte) ça a été absolument merveilleux de travailler avec. Toutes mes grandes chaînes codées en dur avec quelques valeurs dynamiques à l'intérieur sont entièrement gérées par un petit système de «prétraitement des cordes». S'il y a un meilleur moyen, j'aimerais le savoir. – Task

+0

@Task, et qu'en est-il de l'échappement ou de la commande d'articles? XDocument-style de création est génial en particulier parce que vous n'avez pas à vous soucier de toutes ces choses. Si certaines chaînes contiennent des caractères spéciaux XML, cela ne vous dérange pas. Si vous devez déplacer un élément, faites-le simplement (sans avoir à repenser tous ces nombres {0}). Si vous devez insérer un autre XElement à la place de la chaîne, faites-le. Toutes ces tâches deviennent nettement plus difficiles lorsque vous travaillez avec des chaînes. – penartur