2009-08-21 45 views
5

Có cách đơn giản nào để so sánh hai cấu trúc XML để xác định xem chúng có cùng cấu trúc và dữ liệu không?So sánh hai XmlNodes trong C#

Tôi có hàm trả về XmlNode và tôi đang cố gắng viết các bài kiểm tra đơn vị cho nó. Tôi lưu trữ kết quả XML chính xác trong một tệp. Làm cho thử nghiệm tôi tải tập tin vào một XmlDocument, xác định vị trí XmlNode thích hợp và so sánh với kết quả của hàm. Một so sánh thẳng không hoạt động (như mong đợi) và InnerXml không hoạt động. Tôi đang xem xét xóa tất cả khoảng trắng khỏi InnerXml và so sánh điều đó hoặc viết so sánh của riêng tôi để đi bộ trên cây, nhưng tôi không thích tùy chọn nào nhiều.

+0

Bạn đang chạy phiên bản .NET nào? –

Trả lời

2

Nếu bạn phải sử dụng XmlDocument và các loại hỗ trợ của nó, xem xét sử dụng của Microsoft XmlDiffPatch, thực hiện tùy biến diff-hoạt động trên XML cấu trúc dữ liệu.

7

XNode.DeepEquals. Đọc các thông báo trước khi sử dụng nó.

+0

Câu hỏi là về 'XmlDocument' /' XmlNode', không phải về LINQ to XML. –

+0

Để chính xác, câu hỏi của ông là về việc so sánh cấu trúc XML. Vấn đề của anh là với cách tiếp cận của anh ta (sử dụng XmlDocument). Tôi đồng ý với CodeToGlory: XNode.DeepEquals. –

2

Giống như CodeToGlory đã trả lời, XNode.DeepEquals() có thể phù hợp với hóa đơn của bạn, hãy kiểm tra phần nhận xét trên trang MSDN.

Nếu bạn đang mắc kẹt với XmlDocument (thay vì XDocument), câu trả lời là: Không, không có cách nào đơn giản (cách hiện có) để làm điều đó. XmlNode không ghi đè Equals(), hoặc cung cấp một thay thế. Nhưng nó không phải là không thể viết, và cùng một phần chú thích có thể được sử dụng như là một điểm khởi đầu cho một thuật toán cây-đi bộ.

Bạn nhận được một bức tranh rõ ràng về yêu cầu của bạn đầu tiên, liên quan đến Thuộc tính, ý kiến, các nút CDATA, vv