Scala的XML平等问题

时间:2011-03-29 03:19:59

标签: xml scala

我在Scala中偶然发现了XML平等的特性:

scala> val x = <a>12</a>
x: scala.xml.Elem = <a>12</a>

scala> val y = <a>{1}2</a>
y: scala.xml.Elem = <a>12</a>

scala> x == y
res0: Boolean = false

我认为正在发生的是,正在创建两个xml.Text个对象,这与一个不同。但是,这不是它在XML规范中的工作方式:)我想知道是否有任何方法可以比较相等,这样就可以返回true。

谢谢!

1 个答案:

答案 0 :(得分:4)

<a>12</a>表示具有值为“12”的单个子节点的元素,而<a>{1}2</a>表示具有两个子节点的元素,值分别为“1”和“2”。

它们在Scala中在逻辑上是可区分的:x.childArrayBuffer(12)y.childArrayBuffer(1, 2),因此它们是不等的。

XML规范怎么样?通过我的阅读,这两个XML对象 不相等。根据{{​​3}},元素的内容由一个或多个事物(DOM称为“节点”)的序列组成,这些事物可以是the XML spec。因此,元素具有两个相邻的CharData子元素是合乎逻辑的,这在逻辑上与单个连接的CharData子元素不同。

如果你真的想要将它们视为相等,你应该编写一个规范化传递,它接受一个XML对象并连接任何相邻的文本节点,然后执行相等的测试。