C# 使用XDocument/XElement/XAttribute创建Xml

C# 使用XDocument/XElement/XAttribute创建Xml,c#,coding-style,stylecop,linq-to-xml,xelement,C#,Coding Style,Stylecop,Linq To Xml,Xelement,我喜欢使用以下格式创建xml: 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 XElem

我喜欢使用以下格式创建xml:

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")));
它看起来很容易阅读,并且有点像一个选项卡式XML文档(在我看来)。StyleCop对格式设置非常不满意。我犯了很多这样的错误:

SA1116:如果方法参数位于单独的行中,则第一个参数必须从方法名称下的行开始。

SA1118:该参数跨越多行。如果参数较短,请将整个参数放在一行上。否则,将参数的内容保存在临时变量中,并将临时变量作为参数传递。


我能做些什么来保持StyleCop的快乐和代码的可读性?我知道我可以禁用StyleCop规则,但是团队希望为所有非XML创建代码保留这些规则。我可以在以这种方式创建XML的每个方法中选择性地抑制规则,但这似乎是一种痛苦,并且变得丑陋。有什么建议吗?

是的,我建议如下:

  • 为项目创建“默认资源”(右键单击项目、属性、资源)
  • 在那里创建一个新的字符串资源,将名称设置为DefaultXmlDoc或其他名称
  • 将该值设置为以下文本:
    
    




  • 将程序更改为以下一行:
    
    XDocument xml=XDocument.Parse(Properties.Resources.DefaultXmlDoc);
    

我相信这能实现你所有的目标。

好吧,听起来这会奏效,不过我想我应该更清楚一点。我在代码中的许多地方创建了xml,而且几乎总是有动态数据在其中。如果我使用一个资源字符串,我最终需要用实际值替换一堆占位符值。在这一点上,治疗可能比疾病更糟……我保证,它确实有效。处理动态替换值的方法是,在资源字符串中放置{0},然后用一个小例程包装资源字符串获取,该例程使用附加参数对资源字符串执行string.Format。我自己也使用过这个方法,并且(通过正确的实现)使用它绝对是非常棒的。我所有的大硬编码字符串,里面都有一对动态值,完全由一个小型的“字符串预处理”系统处理。如果有更好的方法,我很想知道。@Task,那么转义或者物品顺序呢?XDocument风格的创建非常好,特别是因为您不必担心所有这些事情。如果某些字符串包含XML特殊字符,则不必在意。如果您必须移动某个元素,只需这样做(无需重新考虑所有这些
{0}
数字)。如果需要插入另一个XElement而不是字符串,只需这样做。当使用字符串时,所有这些任务都会变得非常困难。@penartur,我建议问你自己的问题,而不是试图把别人的问题塞进你的问题。@Task,我没有问任何问题,我只是指出你的答案并不能真正解决最初的问题(如前所述),并且只适用于一小部分情况。虽然这可能有助于原作者解决他们的问题,但对于其他有同样问题的人来说却没有多大用处。可悲的是,我最终压制了它[System.Diagnostics.CodeAnalysis.SuppressMessage(“StyleCop.CSharp.ReadabilityRules”,“SA1118:ParameterMustNotSpanMultipleLines”,justify=“Review”)]