gpt4 book ai didi

xml - scala.xml.PrettyPrinter 在没有文本时格式化较短的节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:13 24 4
gpt4 key购买 nike

我使用 scala.xml.PrettyPrinter 在 Scala 中格式化我的 XML。问题在于没有文本内容的节点。而不是这个:

<node></node>

我更喜欢这个:

<node />

我怎样才能使 PrettyPrinter 以我的方式格式化它?

最佳答案

这是 scala-xml 中的一个错误,但已在 2018 年 2 月 20 日的 1.1.0 版中修复。新选项 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

然后你需要在 sbt 中启用一个分支的 JVM,这样 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,则没有理由使用 override-hack。

关于xml - scala.xml.PrettyPrinter 在没有文本时格式化较短的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com