是否有人知道可以执行HTML Diffs的良好托管代码.NET组件?我想比较两个HTML文件并显示差异。
答案 0 :(得分:0)
Microsoft有一个名为XmlDiffPatch的托管代码工具,它也适用于HTML文件。您可以将其作为独立的可执行文件运行,或将diff程序集导入项目中。
答案 1 :(得分:0)
检查htmldiff.net项目。
答案 2 :(得分:0)
如果您正在寻找托管解决方案,http://changedetection.com和http://imnosy.com似乎都会在网页上查找差异。
答案 3 :(得分:0)
我尝试了上面提到的 htmldiff.net ,但是发现比较模糊,不能充分描述我的需求。我担心这可能会产生假阳性结果,即使HTML的格式略有不同,但在浏览器中呈现的格式相同(即标记中属性的排序顺序不同或不同),我也必须确保比较正确无误。样式属性中定义之间的间隔)
我发现唯一可以正确完成此工作的工具是 HTML Tidy (www.html-tidy.org)。它不是一个HTML比较工具,但是它确实提供了很多控制方式,让您可以先将HTML整理/清理/规范化为正常形式,然后再实现自己的比较。
有许多语言的HTML Tidy包装器。我使用 TidyHtml5ManagedRepack (http://www.teosoft.it/TidyHtml5Managed)。在Visual Studio的NuGet中可用。
我在C#中使用以下两种方法来规范化和清理HTML ...
public static string HtmlNormalise(this String html)
{
Document doc = Document.FromString(html);
doc.OutputBodyOnly = AutoBool.Yes;
doc.Quiet = true;
doc.AttributeSortType = TidyManaged.SortStrategy.Alpha;
doc.DropEmptyElements = false;
doc.DropEmptyParagraphs = false;
doc.DropProprietaryAttributes = false;
doc.MergeDivs = TidyManaged.AutoBool.No;
doc.MergeSpans = TidyManaged.AutoBool.No;
doc.WrapAt = 0;
doc.Markup = true;
doc.CleanAndRepair();
return doc.Save().Replace("\r\n", "");
}
public static string HtmlClean(this String html)
{
Document doc = Document.FromString(html);
doc.OutputBodyOnly = AutoBool.Yes;
doc.Quiet = true;
doc.AttributeSortType = TidyManaged.SortStrategy.Alpha;
doc.DropEmptyElements = false;
doc.DropEmptyParagraphs = false;
doc.DropProprietaryAttributes = false;
doc.MergeDivs = TidyManaged.AutoBool.No;
doc.MergeSpans = TidyManaged.AutoBool.No;
doc.WrapAt = 0;
doc.Markup = true;
doc.MakeClean = true;
doc.CleanAndRepair();
return doc.Save().Replace("\r\n", "");
}
我使用这些方法进行清理,然后将HTML作为这样的字符串进行比较...
var Html1Cleaned = Html1.HtmlClean();
var Html2Cleaned = Html2.HtmlClean();
if (Html1Cleaned.Equals(Html2Cleaned))
Console.WriteLine("Html1 and Html2 are the same");
else
Console.WriteLine("Html1 and Html2 are different");
或者像这样在一次操作中进行清理和比较...
if (Html1.HtmlClean().Equals(Html2.HtmlClean()))
Console.WriteLine("Html1 and Html2 are the same");
else
Console.WriteLine("Html1 and Html2 are different");