【发布时间】:2017-02-02 15:55:30
【问题描述】:
这是我的代码
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="core.soayodlee.com">”。使用上面的代码它不起作用请帮助我
-
命名空间声明不是普通属性,您不能在它们上使用
AttributeFilter。您的其他 XML 是什么样的。CoreExceptionFault是在与您的 sn-p 相同的命名空间(URI 方式)内,还是一个根本没有任何命名空间的 XML? -
有没有办法可以忽略命名空间属性,第一行就是这样 ns3:CoreExceptionFault xmlns:ns3="core.soap.yodlee.com"> 我需要比较
-
您可能根本看不到属性的
Difference,但是对于元素,因为它们的命名空间URI 是不同的。您不需要排除该属性,但必须提供一个DifferenceEvalutor以消除命名空间差异。