Scala XML.loadString vs expression littérale

J'ai fait des expériences avec Scala et XML, et j'ai trouvé une étrange différence de comportement entre une balise XML créé avec XML.de charge (ou de loadString) et l'écriture comme un littéral. Voici le code :

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" pln">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()))

Et ici, la sortie :

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

Les types sont les mêmes. Mais il n'y a pas d'égalité. L'ordre des attributs des changements. Il n'est jamais le même que celui d'origine. Les attributs de la littérales sont triés par ordre alphabétique (seul danger ?).

Ce ne serait pas un problème si les deux solutions ne se comportent pas différemment lorsque j'essaie de les transformer. J'ai ramassé quelques intresting Code de Daniel C. Sobral à Comment faire pour modifier l'attribut de Scala Élément XML et écrit ma propre règle, afin de supprimer la première barre de l'attribut "href". Le RuleTransformer fonctionne bien avec le in_xml, mais n'a aucun effet sur from_str !

Malheureusement, la plupart de mes programmes ont à y lire XML via XML.charge(...). Donc, je suis coincé. Quelqu'un sait à propos de ce sujet ?

Cordialement,

Henri

C'est vraiment un bug. Pas que ça aide...
Scala littéraux XML ont connu des problèmes avec l'ordre des attributs. Vous avez peut-vote lampsvn.l'epfl.ch/trac/scala/billet/2735. (Je ne sais pas si ils ont fait attention à la voix, mais il ne peut pas nuire.)
Ils ne font pas attention à la voix, bien qu'ils ne prêter attention à l'activité (adhérents, faire des commentaires, etc). Pourtant, il ne fait pas de mal. J'ai, personnellement, de s'abonner à un bug qui m'intéresse, et upvote n'importe qui, je pense, est particulièrement important.

OriginalL'auteur Henri Bauer | 2010-12-09