Scala XML.loadString vs literal expression

Я экспериментировал с Scala и XML и обнаружил странную разницу в поведении между тегом XML, созданным с помощью XML.load (или loadString), и записью его как литерала. Вот код:

import scala.xml._
// creating a classical link HTML tag
val in_xml = 
// The same as a String
val in_str = """"""
// Convert the String into XML
val from_str = XML.loadString(in_str)

println("in_xml  : " + in_xml)
println("from_str: "+ from_str)
println("val_xml == from_str: "+ (in_xml == from_str))
println("in_xml.getClass() == from_str.getClass(): " +
  (in_xml.getClass() == from_str.getClass()))

А вот вывод:

in_xml  : 
from_str: 
val_xml == from_str: false
in_xml.getClass() == from_str.getClass(): true

Типы те же. Но нет равенства. Порядок атрибутов меняется. Он никогда не совпадает с оригиналом. Атрибуты литераля отсортированы по алфавиту (только опасность?).

Это не было бы проблемой, если бы оба решения не вели себя по-разному, когда я пытаюсь их преобразовать. Я взял интересный код от Дэниела С. Собрала в Как изменить атрибут в XML-элементе Scala и написал свое собственное правило, чтобы удалить первую косую черту атрибута «href». RuleTransformer хорошо работает с in_xml, но не влияет на from_str!

К сожалению, большинству моих программ приходится читать XML через XML.load (...). Итак, я застрял. Кто-нибудь знает об этой теме?

С уважением,

Генри

8
задан Community 23 May 2017 в 12:29
поделиться