【发布时间】:2017-10-02 11:33:45
【问题描述】:
我在将 xml 文档中的各种元素与 XMLUnit (2.2.1) 进行比较时遇到问题。在我的文档中有几个 xml 元素,我想 知道,它们是否彼此不同。但是,我不想以相同的方式比较所有 xml 元素。有时我只是想通过他们的名字来比较它们。在其他情况下我想通过名字和属性或名字和文本来比较它们。
这是一个例子(见 cmets)
控制
<?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();
}
我真正需要的是信息,两个语言(EN,IT)和两个代码(10000-1,30000-3)已被删除(未替换)并更改了FIRSTNAME。
无论是否使用 XML 单元 (DiffBuilder),我如何获取这些信息?
感谢您的帮助!
【问题讨论】:
标签: java xml diff xmlunit xmlunit-2