我有两个XSD文件,它们应该是相同的。一个本地存储在机器上,一个从存储它的网络中检索。我在本地机器上运行此测试,自然测试成功。但是当我在TFS(Team Foundation Server)上运行相同的构建时,测试失败。我发现很难解释原因。我比较的方式是:
public bool compareFunc(string schema1, string schema2)
bool passed = true;
XmlDocument doc1 = new XmlDocument();
XmlDocument doc2 = new XmlDocument();
doc1.Load(schema1);
doc2.Load(schema2);
string s1 = doc1.innerXML;
string s2 = doc2.innerXML;
for(int i=0; i< s1.length; i++){
if(_s2.Substring(i) != _s1.Substring(i)) { passed = false; }
}
return passed;
}
答案 0 :(得分:4)
我猜服务器上的文件有不同的空格或换行符。这样,字符串的内容就不同了,但文件的含义是相同的。
有两种方法可以做到这一点。第一种方法是循环遍历xml内容,逐个元素,逐个属性,进行比较。第二种方法是将每个xml文档保存为一个新字符串,这样可以使布局标准化。
顺便说一下,要比较2个字符串,你可以使用(s1==s2)
。因此,您当前的实现(无法正常工作)可以简化为几行:
bool compare(string s1, string s2){
XmlDocument x1 = new XmlDocument(), x2 = new XmlDocument();
x1.Load(s1);
x2.Load(s2);
return x1.InnerXml == x2.InnerXml;
}
答案 1 :(得分:1)
你可能忘记检查s1和s2长度,因为你的for只是在s1.length上迭代。