Scala中空字符串XML属性的正确行为是什么
我一直在使用一些XML,我注意到当scala.XML.Node遇到一个值为空字符串的属性时,它会出现两种不同的行为。例如,使用Scala 2.10.3:Scala中空字符串XML属性的正确行为是什么,xml,scala,Xml,Scala,我一直在使用一些XML,我注意到当scala.XML.Node遇到一个值为空字符串的属性时,它会出现两种不同的行为。例如,使用Scala 2.10.3: scala> val test1 = <Object Name="Test" Attr=""/> test1: scala.xml.Elem = <Object Name="Test" Attr=""/> scala> scala.xml.XML.save("test1.xml", test1) scal
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
或者:
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()
你知道这些差异是从哪里来的吗?正确的行为是什么?如果我想可靠地区分一个完全缺失的属性和一个存在但为空的属性,那么我基本上就只能使用其他东西来进行解析了吗?当你调用
scala.xml.XML.loadFile("test1.xml")
SaxParser空属性解析(test2)生成值为scala.collection.immutable.List的scala.xml.unfixedAttribute,其中包含单个元素scala.xml.Text,属性数据为:String=“”
内联创建的Xml(test1)具有值为scala.collection.immutable.Nil的空属性scala.Xml.unfixedAttribute
由于比较有趣,这些属性是相等的。它通过org.scala.Metadata#asAttrMap比较属性:
def asAttrMap: Map[String, String] =
iterator map (x => (x.prefixedKey, x.value.text)) toMap
如您所见,Nil和List(Text(“”)具有相同的x.value.Text值,该值等于“”
如果你有更多的问题,我很乐意回答
def asAttrMap: Map[String, String] =
iterator map (x => (x.prefixedKey, x.value.text)) toMap