2

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和输出是不一样的。为什么?

4

1 回答 1

5

答案只是这是一个错误。

幸运的是,有一个简单的解决方法。我不知道 Anti-XML 的完整故事,但 Daniel Spiewak 似乎不再维护它——<a href="https://github.com/djspiewak/anti-xml" rel="noreferrer">他的repo 多年来一直没有被触及,并且仍在 Scala 2.9.1 上。然而,有一个 fork(由一家名为 Arktekk 的公司)修复了这个 bug,有 2.10 的构建等。它也可以从 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"/>

这是你所期望的。

于 2013-11-16T18:53:21.697 回答