Ясно, что мне нужно (а) преобразовать обе строки в канонический XML или (б) сравнить их синтаксические деревья. Следующее не работает, потому что возвращенный объект документа не определен разумным ==
.
Nokogiri.XML(doc_a) == Nokogiri.XML(doc_b)
Так же как и следующее, потому что to_xml
Нокогири оставляет некоторое внутреннее пространство:
Nokogiri.XML(doc_a).to_xml == Nokogiri.XML(doc_b).to_xml
Это разумное приближение равенства (и оно будет работать в большинстве случаев), но оно не совсем верно:
Nokogiri.XML(doc_a).to_xml.squeeze(' ') == Nokogiri.XML(doc_b).to_xml.squeeze(' ')
Я уже использую Nokogiri, поэтому я бы предпочел придерживаться его, но я буду использовать любую библиотеку, которая работает.