0 Câu hỏi: Xử lý ngoại lệ trong truy vấn LINQ

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi có một tệp XML với một loạt các đối tượng, có thể có nhiều trường, ví dụ:

<object>
  <obj_name>Car</obj_name>
  <field>
    <name>Brand</name>
    <type>string</type>
    <value>Volvo</value>
  </field>
  <field>
    <name>Power</name>
    <type>int</type>
    <value>200</value>
  </field>
</object>

Tôi chỉ nên đọc từ tệp các đối tượng có tên và ít nhất một trường. Trường hợp lệ phải có tên, loại (chuỗi hoặc int) và giá trị. Tôi đã viết truy vấn này:

var objects = from newobject in 
              XDocument.Load("input.xml").Descendants("object")
                     where (string)newobject.Element("obj_name") != ""
                     select new DataObject
                     {

                         Name = (string)newobject.Element("obj_name"),
                         Fields = new List<Field>(
                             from fields in newobject.Elements("field")
                             where (string)fields.Element("name") != ""
                             where (string)fields.Element("type") != "" && ((string)fields.Element("type") == "string" || (string)fields.Element("type") == "int")
                             where (string)fields.Element("value") != ""
                             select new Field
                             {
                                 Name = (string)fields.Element("name"),
                                 Type =  (string)fields.Element("type"),
                                 Value = (string)fields.Element("value")                                
                             })    
                     };

Nó hoạt động tốt nhưng vấn đề là tệp cũng có thể có các thẻ không hợp lệ, ví dụ <name>Bob</type> gây ra ngoại lệ. Làm cách nào tôi có thể bỏ qua các đối tượng /trường có thẻ bị hỏng và xử lý các ngoại lệ trong truy vấn này?

    
1
  1. Bạn phải sửa lỗi trước khi chạy c #. Các lớp XML của thư viện Net sẽ không cho phép bất kỳ tệp XML nào được đọc với các lỗi thẻ phù hợp. Bạn có thể đọc tệp bằng các lớp TEXT và sau đó sửa, nhưng chúng tôi khuyên bạn nên sửa các lỗi XML này và không viết phần mềm ngăn chặn để khắc phục các sự cố thực.
    2019-05-08 09: 13: 42Z
  2. Cá nhân tôi nghĩ rằng nếu xml không hợp lệ, bạn không nên đọc bất kỳ dữ liệu nào từ nó. Ý tôi là, làm thế nào bạn có muốn "bỏ qua" phần tử. Thẻ name có thực sự "đóng" sau thẻ </type> không? Điều gì sẽ xảy ra nếu thiếu >. Tôi không thấy một cách hay để phân tích xml bị hỏng một cách đáng tin cậy.
    2019-05-08 09: 13: 53Z
  3. Nhiệm vụ của tôi là viết một truy vấn có thể xử lý các lỗi như thế này để tôi không thể sửa lỗi này trước khi đọc. Một thẻ bị đóng bởi một thẻ khác là trường hợp dữ liệu không hợp lệ duy nhất, tệp sẽ không bị thiếu < hoặc `> '.
    2019-05-08 09: 21: 48Z
  4. Có những tiện ích cố gắng sửa chữa XML bị hỏng, ví dụ XMLTidy. Tuy nhiên, điều này hơi giống với việc cố gắng sửa chữa mã Java hoặc C # bị hỏng (hoặc thực sự giống như một trình sửa lỗi chính tả) - nó có thể luôn tạo ra một cái gì đó có giá trị về mặt cú pháp, nhưng nó sẽ không luôn là mục đích của người viết. Tốt hơn hết là sửa lỗi chương trình tạo XML xấu để bắt đầu.
    2019-05-08 10: 30: 12Z
  5. Tôi chắc chắn có quan điểm của bạn, nhưng đó là một nhiệm vụ tuyển dụng và tệp xml được đưa ra.
    2019-05-08 11: 24: 26Z
0 Câu trả lời                              0                         
nguồn đặt đây
Những câu hỏi khác