2010-06-30 11 views
5

Tôi muốn tạo xml bằng cách sử dụng định dạng sau:StyleCop hạnh phúc tạo ra Xml sử dụng 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"))); 

Có vẻ như dễ đọc và kinda chảy giống như một tài liệu XML theo thẻ (theo ý kiến ​​của tôi). StyleCop là rất không hài lòng với định dạng mặc dù. Tôi nhận được rất nhiều lỗi sau:

SA1116: Nếu tham số phương thức nằm trên các dòng riêng biệt, thông số đầu tiên phải bắt đầu trên dòng bên dưới tên của phương thức.

SA1118: Tham số kéo dài nhiều dòng. Nếu tham số là ngắn, hãy đặt toàn bộ tham số trên một dòng. Nếu không, hãy lưu nội dung của tham số trong một biến tạm thời và chuyển biến tạm thời dưới dạng tham số.

Tôi có thể làm gì để giữ cho StyleCop vui vẻ và mã có thể đọc được? Tôi biết tôi có thể vô hiệu hóa các quy tắc StyleCop, nhưng nhóm nghiên cứu muốn giữ các quy tắc đó cho tất cả mã tạo XML không phải. Tôi có thể ngăn chặn có chọn lọc quy tắc trong mọi phương pháp tạo XML theo cách này, nhưng điều đó có vẻ giống như một nỗi đau và trở nên xấu xí. Bất kỳ đề xuất?

+0

Đáng buồn thay, tôi đã kết thúc việc đàn áp nó. : <[System.Diagnostics.CodeAnalysis.SuppressMessage ("StyleCop.CSharp.ReadabilityRules", "SA1118: ParameterMustNotSpanMultipleLines", Justification = "Reviewed.")] – granadaCoder

Trả lời

2

Vâng, tôi xin đề nghị như sau:

  • Tạo 'tài nguyên mặc định' cho dự án của bạn (click chuột phải vào dự án, Properties, nguồn lực)
  • Tạo một tài nguyên chuỗi mới có, thiết lập danh như DefaultXmlDoc hoặc một cái gì đó
  • Thiết lập giá trị như văn bản sau đây:
    <Root>
    <A X="1" Y="2" />
    <B Z="3" />
    <C />
    </Root>
  • Thay đổi chương trình của bạn như sau một liner:
    XDocument xml = XDocument.Parse(Properties.Resources.DefaultXmlDoc);

Tôi tin rằng điều này hoàn thành tất cả các mục tiêu của bạn.

+0

Vâng, có vẻ như nó sẽ hoạt động, tôi đoán tôi nên có được một mặc dù rõ ràng hơn một chút. Tôi tạo xml ở nhiều nơi trong suốt mã và hầu như luôn luôn có dữ liệu động trong đó. Nếu tôi sử dụng một chuỗi tài nguyên, tôi sẽ cần phải thực hiện một loạt các thay thế của các giá trị giữ chỗ với các giá trị thực. Tại thời điểm đó, việc chữa bệnh có thể tồi tệ hơn bệnh ... – Tallek

+0

Tôi đảm bảo, nó hoạt động. Cách xử lý các giá trị thay thế động là bằng cách đặt {0} vào chuỗi tài nguyên và sau đó gói chuỗi tìm nạp tài nguyên bằng một thường trình nhỏ thực hiện String.Format trên chuỗi tài nguyên với các đối số bổ sung. Tôi đã sử dụng phương pháp này bản thân mình và (với việc thực hiện chính xác) nó đã được hoàn toàn tuyệt vời để làm việc với. Tất cả các chuỗi hardcoded lớn của tôi với một vài giá trị động bên trong chúng hoàn toàn được xử lý bởi một hệ thống 'xử lý trước chuỗi' nhỏ. Nếu có cách nào tốt hơn, tôi rất muốn biết điều đó. – Task

+0

@Task, và những gì về thoát, hoặc các mục theo thứ tự? Tạo kiểu XDocument rất tuyệt vời vì bạn không phải lo lắng về tất cả những thứ này. Nếu một số chuỗi chứa các ký tự đặc biệt XML, bạn không quan tâm. Nếu bạn phải di chuyển một số phần tử, bạn chỉ cần làm điều đó (mà không cần phải suy nghĩ lại tất cả các số '{0}' này). Nếu bạn cần phải chèn một XElement thay vì chuỗi, bạn chỉ cần làm điều đó. Tất cả các tác vụ này trở nên khó khăn hơn nhiều khi làm việc với chuỗi. – penartur