Scala ve XML ile denemeler yapıyorum ve XML.load (veya loadString) ile oluşturulmuş bir XML etiketi ile bir literal olarak yazarken davranışlarda garip bir fark buldum. BuradaScala XML.loadString vs literal ifade
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()))
Ve çıkış:
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
türleri aynıdır İşte kodudur. Ama eşitlik yok. Özelliklerin sırası değişir. Asla orijinal olanla aynı değildir. Litteral'ın nitelikleri alfabetik olarak sıralanmıştır (sadece tehlike?).
Her iki çözüm de, dönüştürmeyi denediğimde farklı davranmazsa bu sorun olmaz. Daniel C. Sobral'dan How to change attribute on Scala XML Element numaralı telefondan bazı gizli kodları aldım ve "href" özniteliğinin ilk çizgisini kaldırmak için kendi kuralımı yazdım. RuleTransformer in_xml ile iyi çalışır, ancak from_str!
Ne yazık ki, çoğu programım XML.load (...) aracılığıyla XML'i okumak zorunda. Yani sıkıştım. Birisi bu konu hakkında biliyor mu?
Saygılarımızla,
Henri
Bu kesinlikle bir hatadır. Bu yardımcı olmuyor ... –
Scala XML editörleri, özellik sırasına göre bilinen sorunlar yaşıyor. Http://lampsvn.epfl.ch/trac/scala/ticket/2735 adresine oy verebilirsiniz. (Oy vermelerine gerçekten dikkat etseler bile bilmiyorum, ama canını acıtmaz.) – Steve
Oylamaya dikkat etmeseler de, aktiviteye dikkat etmelerine rağmen (abone, yorum yapma, vb.). Yine de, incitmez. Ben şahsen, ilgilendiğim herhangi bir hataya abone oluyorum ve özellikle önemli olduğunu düşündüğüm herhangi bir şeyi kabul ediyorum. –