Я экспериментировал с Scala и XML, и я обнаружил странное различие в поведении между тегом XML, созданным с помощью XML.load (или loadString), и написанием его как литерала. Вот код:Scala XML.loadString vs literal выражение
import scala.xml._
// creating a classical link HTML tag
val in_xml = <link type="text/css" href="/css/main.css" rel="stylesheet" xmlns="http://www.w3.org/1999/xhtml"></link>
// The same as a String
val in_str = """<link type="text/css" href="/css/main.css" rel="stylesheet" xmlns="http://www.w3.org/1999/xhtml"></link>"""
// 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 : <link href="/css/main.css" rel="stylesheet" type="text/css" xmlns="http://www.w3.org/1999/xhtml"></link>
from_str: <link rel="stylesheet" href="/css/main.css" type="text/css" xmlns="http://www.w3.org/1999/xhtml"></link>
val_xml == from_str: false
in_xml.getClass() == from_str.getClass(): true
типы одинаковы. Но не существует равенства. Изменяется порядок атрибутов. Это не то же самое, что и оригинальное. Атрибуты litteral сортируются по алфавиту (только опасность?).
Это не было бы проблемой, если бы оба решения не вели себя по-другому, когда я пытаюсь их преобразовать. Я поднял какой-то интересный Кодекс от Даниэля С. Собраля по телефону How to change attribute on Scala XML Element и написал свое собственное правило, чтобы удалить первый слэш атрибута «href». RuleTransformer хорошо работает с in_xml, но не влияет на from_str!
К сожалению, большинство моих программ должны читать там XML через XML.load (...). Итак, я застрял. Кто-нибудь знает об этой теме?
С наилучшими пожеланиями,
Анри
Это определенно ошибка. Не то, что помогает ... – 2010-12-09 23:42:02