如何在Ruby中测试XML相等性?

Jam*_*sen 12 ruby xml testing

显然,我需要(a)将两个字符串转换为规范XML或(b)比较它们的解析树.以下不起作用,因为返回的文档对象没有明确的==定义.

Nokogiri.XML(doc_a) == Nokogiri.XML(doc_b)
Run Code Online (Sandbox Code Playgroud)

以下也不是,因为Nokogiri to_xml留下了一些内部空白:

Nokogiri.XML(doc_a).to_xml == Nokogiri.XML(doc_b).to_xml
Run Code Online (Sandbox Code Playgroud)

这是一个合理的近似平等(并且适用于大多数情况),但它并不完全正确:

Nokogiri.XML(doc_a).to_xml.squeeze(' ') == Nokogiri.XML(doc_b).to_xml.squeeze(' ')
Run Code Online (Sandbox Code Playgroud)

我已经在使用Nokogiri,所以我更愿意坚持下去,但我会使用任何图书馆的作品.

cbe*_*eer 13

实际上有几个很好的基于Nokogiri的库用于检查XML树的等价性,包括equivalent-xmlnokogiri-diff,这可能会有所帮助.

我更喜欢等效xml,因为它提供了更多的灵活性(可能以严格为代价?),允许您与元素顺序或空格进行比较或不考虑.


sgt*_*sgt 5

如果您正在寻找结构上的相等性并且不关心标记和属性的顺序,那么xml-simple库可能是一个不错的选择。它将xml转换为ruby的数据结构(哈希和列表),可以与==操作员进行安全比较。