0
這是我的代碼忽略XML ns參數使用XML單元
Scanner s = new Scanner(new File("ignore.txt"));
final ArrayList<String> list = new ArrayList<String>();
while (s.hasNext()){
list.add(s.next());
}
s.close();
int lengthList = list.size();
final Set<String> values = new HashSet<String>(list);
Diff myDiff1 = DiffBuilder.compare(writer1.toString()).withTest(writer.toString())
.checkForSimilar()
.checkForIdentical()
.ignoreWhitespace()
.normalizeWhitespace()
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText))
.withNodeFilter(new Predicate<Node>() {
public boolean test(Node n) {
String temp = Nodes.getQName(n).getLocalPart();
//System.out.println(temp);
return !(n instanceof Element &&
values.contains(temp));
}
})
.withAttributeFilter(new Predicate<Attr>(){
public boolean test(Attr n){
javax.xml.namespace.QName attrName = Nodes.getQName(n);
//System.out.println(attrName.toString());
//QName Temp = new QName();
//System.out.println(Temp.toString()+n.toString());
Boolean temp1 = !values.contains(attrName.toString());
//Boolean temp1 =!attrName.toString().equals("answerType") ;
//System.out.println(temp1);
//return !attrName.equals(new QName("balType",null, null, "curCode"));
return temp1;
}
})
.build();
我的XML文件
<ns3:CoreExceptionFault xmlns:ns3="http://core.soayodlee.com">
<faultText>com.yodlee.util.system.ycache.CobrandNotSupportedException: The CobrandCache for the cobrand 10004 is not initialized.</faultText>
</ns3:CoreExceptionFault>
我想忽略的xmlns:NS3屬性。上面的文件Ignore.txt包含我需要忽略的所有節點和屬性。但是當我添加xmlns:ns3時,它不會忽略該屬性。我正在使用XMLunit 2.2.1
名稱空間聲明不是普通屬性,XMLUnit可能甚至不會看到它(作爲一個屬性,只有它的作用)。你想要比較它的元素是什麼樣的?我不知道我是否理解你的意思,忽略它。 –
我使用屬性過濾器和節點過濾器來忽略我不想斷言的屬性和節點。所以,我想在比較xml的時候忽略這個「xmlns:ns3 =」http://core.soayodlee.com「>」。使用上面的代碼它不起作用,請幫助我 –
命名空間聲明不是普通的屬性,你不能對它們使用'AttributeFilter'。你的其他XML是什麼樣的。 CoreExceptionFault是否與你的代碼片段一樣在命名空間內(URI方式),還是一個沒有任何命名空間的XML? –