2014-10-23 2 views
2

Постарайтесь, чтобы эти два XML были похожи (хотите проигнорировать xmlns) и секцию differer element, но не работали правильно для меня. Если удалить xmlns, doc - simmilr. Я использую XMLUnit 1,5XMLUNIT игнорировать xmlns?

String s1 = "<root xmlns=\"http:example.com\">" 
         +"<Date/>" 
         +"<Time/>" 
        +"</root>"; 

String s2 = "<root>" 
         +"<Time/>" 
         +"<Date/>" 
        +"</root>"; 
myDiff = XMLUnit.compareXML(s1,s2); 

ответ

1

Есть две вещи, которые нужно сделать:

  • для того, чтобы игнорировать различные пространства имен, нужно предоставить DifferenceListener, что понизило разницу
  • по умолчанию ElementQualifier, используемый Diff, равен ElementNameQualifier, который сравнивает только элементы с тем же локальным именем и URI пространства имен. Вы также должны переопределить это.

    Diff xmlDiff = new Diff(s1, s2); 
    xmlDiff.overrideElementQualifier(new ElementNameQualifier() { 
         @Override 
         protected boolean equalsNamespace(Node control, Node test) { 
          return true; 
         } 
        }); 
    xmlDiff.overrideDifferenceListener(new DifferenceListener() { 
         @Override 
         public int differenceFound(Difference diff) { 
          if (diff.getId() == DifferenceConstants.NAMESPACE_URI_ID) { 
           return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; 
          } 
          return RETURN_ACCEPT_DIFFERENCE; 
         } 
         @Override 
         public void skippedComparison(Node arg0, Node arg1) { } 
        }); 
    

создает результат в "подобный". Чтобы получить «идентичный» результат, вам также потребуется понизить отметки CHILD_NODELIST_SEQUENCE_ID.

Смежные вопросы