加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala的XML平等问题

发布时间:2020-12-16 19:14:36 所属栏目:安全 来源:网络整理
导读:我在 Scala中偶然发现了XML平等的特性: scala val x = a12/ax: scala.xml.Elem = a12/ascala val y = a{1}2/ay: scala.xml.Elem = a12/ascala x == yres0: Boolean = false 我认为正在发生的是,正在创建两个xml.Text对象,这与一个不同.但是,这不是它在XML规
我在 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.

谢谢!

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读