比较两个HTML文档,忽略多个和尾随空格

时间:2014-03-27 12:19:42

标签: html dom

是否有比较HTML文档的工具,如:

<p b="1" a="0 "> a     b
c </p>

(作为C字符串:"<p> a b\nc </p>"等于

<p a="0 " b="1">a b c</p>

请注意:

  • 文本将多个空格转换为单个空格
  • 换行符已转换为空格
  • 文本尾随和标题空格被剥离
  • 属性被置于标准订单
  • 属性值未更改,包括尾随空格

为什么我要

我正致力于Markdown Test Suite,旨在衡量降价引擎合规性和便携性。

我们有降价输入,预期的HTML输出,并想确定生成的HTML输出是否等于预期的输出。

问题是Markdown未指定,因此我们无法直接比较两个HTML字符串。

实际测试代码为here,如果您想尝试解决方案,只需修改run-tests.py#dom_normalize

我尝试过的事情

  • beautifulsoup。订购属性,但不能很好地处理空格?

    函数formatter正则表达式修改可能有效,但我没有看到区分节点内部和属性的方法。

    像这样的Python解决方案是理想的。

  • 寻找类似于isEqualNode()的Javascript函数(因为忽略nodeVaue)而无法正常工作+一些无头JS引擎。无法找到。

如果没有更好的东西,我只需要将自己的输出格式化程序前端编写到某个HTML解析器中。

1 个答案:

答案 0 :(得分:0)

我最终制作了一个自定义HTML渲染器,根据Python的stdlib HTMLParser对事物进行规范化。

您可以在https://github.com/karlcow/markdown-testsuite/blob/749ed0b812ffcb8b6cc56f93ff94c6fdfb6bd4a2/run-tests.py#L20

看到它

用法和docstrig测试位于:https://github.com/karlcow/markdown-testsuite/blob/749ed0b812ffcb8b6cc56f93ff94c6fdfb6bd4a2/run-tests.py#L74