我一直在使用一些XML,並且我注意到當scala.xml.Node遇到一個具有值的屬性時,我會看到兩個不同的行爲是一個空字符串。作爲一個例子,使用Scala的2.10.3:什麼是Scala中空字符串XML屬性的正確行爲
scala> val test1 = <Object Name="Test" Attr=""/>
test1: scala.xml.Elem = <Object Name="Test" Attr=""/>
scala> scala.xml.XML.save("test1.xml", test1)
scala> val test2 = scala.xml.XML.loadFile("test1.xml")
test2: scala.xml.Elem = <Object Attr="" Name="Test"/>
scala> test1 == test2
res1: Boolean = true
我有兩個節點(在技術上他們elems的),似乎是除了屬性順序相同。但是,當我嘗試提取「的Attr」屬性的值,我得到不同的結果
scala> val attr1 = (test1 \ "@Attr").headOption
attr1: Option[scala.xml.Node] = None
scala> val attr2 = (test2 \ "@Attr").headOption
attr2: Option[scala.xml.Node] = Some()
或者:
scala> val attrs1 = test1.attributes
attrs1: scala.xml.MetaData = Name="Test" Attr=""
scala> val attrs2 = test2.attributes
attrs2: scala.xml.MetaData = Attr="" Name="Test"
scala> attrs1 == attrs2
res5: Boolean = true
scala> val attr1 = attrs1.get("Attr")
attr1: Option[Seq[scala.xml.Node]] = Some(List())
scala> val attr2 = attrs2.get("Attr")
attr2: Option[Seq[scala.xml.Node]] = Some()
任何想法,這些差異是哪裏來的?什麼是正確的行爲?如果我想要可靠地區分僅存在缺失的屬性和存在但爲空的屬性,我基本上是否會使用其他方法來解析數據?