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>
IのみANを適用するElementSelectors.conditionalBuilder(https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectors)と組み合わせて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();
}
は、二つの言語(EN、IT)と2つのコード(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 –