Anti-XML scala隐藏了xml属性

时间:2013-11-16 16:20:32

标签: xml scala namespaces anti-xml

Anti-xml将是Scala中的后继xml库。但我发现了一些怪不得的东西。

输入

package com.twitter.sample
import com.codecommit.antixml._

object ReadingNamespaceXml extends Application{

  val xml = <tra:route xmlns:tra="trace">
              <spo:id xmlnls:spo="sport">23232322</spo:id>
              <tra:service ref="go" xsi:type="ref:manualService" xmlns:ref="ServiceRef"/>
            </tra:route>.convert

  val route =  xml \ "route"
  Console println route.unselect
}

输出:

  <tra:route>
  <spo:id xmlnls:spo="sport">23232322</spo:id>
  <tra:service xsi:type="ref:manualService" ref="go"/>
  </tra:route>

因此,输入xml和输出不一样。为什么呢?

1 个答案:

答案 0 :(得分:5)

答案就是这是一个错误。

幸运的是,这是一个简单的解决方案。我不知道关于Anti-XML的完整故事,但是Daniel Spiewak似乎不再维护它了 - his repo多年来没有被触及过,而且仍然在Scala 2.9.1上。然而,a fork(由一家名为Arktekk的公司)修复了这个错误,为2.10建立了等等。它也是available from Maven Central。我对Arktekk一无所知,但我一直很乐意使用这个叉子。

为了证明它有效,这里是使用旧的0.3版本的简化示例:

scala> import com.codecommit.antixml._
import com.codecommit.antixml._

scala> <foo ref="bar" xmlns:ref="baz"/>.convert
res0: com.codecommit.antixml.Elem = <foo ref="bar"/>

现在有了Arktekk的0.5.1:

scala> import com.codecommit.antixml._
import com.codecommit.antixml._

scala> <foo ref="bar" xmlns:ref="baz"/>.convert
res0: com.codecommit.antixml.Elem = <foo xmlns:ref="baz" ref="bar"/>

这是你期望的。