Это ошибка в scala-xml, но она была исправлена в версии 1.1.0 20 февраля 2008 года. Новая опция minimizeEmpty
была добавлена к PrettyPrinter
.
Чтобы использовать 1.1.0, добавьте следующее к вашему build.sbt
:
libraryDependencies ++= Seq(
"org.scala-lang.modules" %% "scala-xml" % "1.1.0"
)
Вот пример того, как использовать новую опцию в PrettyPrinter
:
val pp = new xml.PrettyPrinter(80, 2, minimizeEmpty = true)
val x = <node><leaf></leaf></node>
println(pp.format(x))
Будет выведено:
<node>
<leaf/>
</node>
Если компилятор Scala, жалуется:
java.lang.NoSuchMethodError: scala.xml.PrettyPrinter.<init>(IIZ)V
тогда вам нужно включить раздвоенную JVM в sbt, чтобы Scala использовала новую версию scala-xml. Просто добавьте следующее к вашему build.sbt
:
fork := true
До scala-xml 1.1.0 метод создания <node/>
, leafTag()
был в классе, но не использовался. Вы можете исправить это так:
import xml._
val p2 = new PrettyPrinter(120, 2) {
override protected def traverse(node:Node, pscope:NamespaceBinding, ind:Int) =
node match {
case n:Elem if n.child.size == 0 => makeBox(ind, leafTag(n))
case _ => super.traverse(node, pscope, ind)
}
}
Нет смысла использовать переопределение, если вы можете просто обновиться до 1.1.0.