我在將xml文檔中的各種元素與XMLUnit(2.2.1)進行比較時遇到了問題。在我的文檔中有幾個xml元素,我想知道 是否彼此不同。但是,我不想以相同的方式比較所有xml元素。有時我只是想通過他們的名字來比較他們。在其他情況下,我想通過名稱和屬性或名稱和文本進行比較。XML單元 - 在不同的xml元素上使用自定義元素選擇器
下面是一個例子(見註釋)
控制
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<LANGUAGES>
<!-- Compare LANGUAGE by Name and Attribute -->
<LANGUAGE VALUE="DE" />
<LANGUAGE VALUE="EN" />
<LANGUAGE VALUE="IT" />
<LANGUAGE VALUE="FR" />
</LANGUAGES>
<CODES>
<!-- Compare CODE by Name and Text -->
<CODE>10000-1</CODE>
<CODE>20000-2</CODE>
<CODE>30000-3</CODE>
<CODE>40000-4</CODE>
</CODES>
<CONTACT> <!-- Compare CONTACT and Children just by Name -->
<FIRSTNAME>Max</FIRSTNAME>
<SURNAME>Mustermann</SURNAME>
</CONTACT>
</ROOT>
測試:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<LANGUAGES>
<!-- Compare LANGUAGE by Name and Attribute -->
<LANGUAGE VALUE="DE" />
<LANGUAGE VALUE="FR" />
</LANGUAGES>
<CODES>
<!-- Compare CODE by Name and Text -->
<CODE>20000-2</CODE>
<CODE>40000-4</CODE>
</CODES>
<CONTACT> <!-- Compare CONTACT and Children by Name -->
<FIRSTNAME>Tim</FIRSTNAME>
<SURNAME>Mustermann</SURNAME>
</CONTACT>
</ROOT>
我試圖聯合ElementSelectors與ElementSelectors.conditionalBuilder(https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectors)只適用於一個特定元素上的ElementSelector(whenElementIsNamed)。也許這不是我想要達到的目標。
這是我的代碼用於測試:
public void xmlDiff() {
String control = getControlDocument(); //
String test = getTestDocument(); //
Diff myDiff = DiffBuilder.compare(control)//
.withTest(test) //
.ignoreWhitespace() //
.ignoreComments() //
.checkForSimilar() //
.withNodeMatcher(new DefaultNodeMatcher(partialElementSelector("LANGUAGE", ElementSelectors.byNameAndAllAttributes), partialElementSelector("CODE",ElementSelectors.byNameAndText), ElementSelectors.byName)) //
.build();
assertThat(myDiff.hasDifferences()).isTrue(); //
}
private ElementSelector partialElementSelector(final String expectedName, final ElementSelector elementSelector) {
return ElementSelectors.conditionalBuilder().whenElementIsNamed(expectedName).thenUse(elementSelector).build();
}
我真正需要的是信息,這兩種語言(英語,IT)和兩個碼(10000-1,30000-3)已刪除(未替換)和FIRSTNAME已更改。
我該如何獲得那些有或沒有XML單元(DiffBuilder)的信息?
謝謝你的幫助!
謝謝Stefan,那就是我一直在尋找的:)! – fwshngtn
我已添加https://github.com/xmlunit/user-guide/wiki/SelectingNodes#using-more-than-one-elementselector-at-the-same-time –
很高興爲您效力@fwshngtn –