Я экспериментировал с 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 (...). Итак, я застрял. Кто-нибудь знает об этой теме?
С уважением,
Генри