2012-11-13 28 views
6

Tôi có 2 tệp xml:Cách so sánh hai xml với cùng một không gian tên nhưng các tiền tố khác nhau bằng cách sử dụng java và xmlunit

Vấn đề nằm trong tiền tố thuộc tính.

<element xmlns:prefix1="namespace" prefix1:attribute="some value">Some text</element> 


<element xmlns:prefix2="namespace" prefix2:attribute="some value">Some text</element> 

hai xml này giống nhau, với cùng một không gian tên, nhưng với các tiền tố khác nhau. Nếu tôi so sánh với xác nhận xmlunit -> thất bại. Làm thế nào tôi có thể xử lý nó?

trong trường hợp so sánh tương tự() hoặc giống hệt nhau() Tôi có lỗi:

tên thuộc tính dự kiến ​​'thông điệp: MessageNameString' nhưng 'null'
Dự kiến ​​tên thuộc tính 'thông điệp: MessageVersion' nhưng 'rỗng '
tên thuộc tính dự kiến ​​'null' nhưng 'mes: MessageNameString null'
Dự kiến ​​tên thuộc tính '' nhưng 'mes: MessageVersion'

+0

Bạn có thể cung cấp XML thực tế mà bạn đang thử nghiệm không? Ngay cả khi tôi thêm thuộc tính, kiểm tra "tương tự" cũng được gửi cho tôi. –

+0

Tôi có thể gửi nó bằng e-mail. Chúng khá lớn đối với các hình thức của stackoverflow –

+0

XML định nghĩa "giống hệt nhau" - có thể xác định một "tương tự" dựa trên định nghĩa XML tương tự. ví dụ. '' và '' là ngữ nghĩa cùng một tài liệu. Sử dụng "tương tự()" là vấn đề nếu thứ tự con là quan trọng (thường là). Shucks! – mogsie

Trả lời

5

các thử nghiệm sau vượt qua 'tương tự' kiểm tra nhưng không là 'giống hệt' kiểm tra:

String control = "<prefix1:element xmlns:prefix1=\"namespace\" prefix1:attribute=\"x\">Some text</prefix1:element>"; 
    String test = "<prefix2:element xmlns:prefix2=\"namespace\" prefix2:attribute=\"x\">Some text</prefix2:element>"; 
    try 
    { 
     Diff diff = XMLUnit.compareXML(control, test); 
     assertTrue("Similar", diff.similar()); 
     assertTrue("Identical", diff.identical()); 
    } 
    catch (Exception e) 
    { 
     fail(e.getMessage()); 
    } 

Từ các tài liệu xmlunit API:

  • giống hệt nhau: nội dung và trình tự của các nút trong tài liệu là chính xác giống
  • tương tự: nội dung của các nút trong các văn bản đều giống nhau, nhưng sự khác biệt nhỏ tồn tại ví dụ trình tự các phần tử anh chị em, các giá trị của tiền tố không gian tên, sử dụng các giá trị thuộc tính ngụ ý

Vì vậy, việc sử dụng kiểm tra "tương tự" sẽ cung cấp cho bạn những gì bạn muốn.

Chỉnh sửa: thêm thuộc tính có tiền tố, cùng một kết quả.

+0

Sự cố nằm trong các tiền tố thuộc tính. Tôi sửa ví dụ của tôi. Đối với các nút, nó hoạt động. –

0
// identical 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), true) 
// similar 
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), false) 
Các vấn đề liên quan