需要将scala Node转换为Elem



我有一个xml RewriteRule,我正在尝试修改传递的Node n。我想做一些事情,比如复制&重命名n,但这些功能仅在Elem上可用。

如何将节点n转换为枚举?

我本想找到一种比这更简单的方法,但我最终使用Node中的属性构建了一个新的Elem,效果很好。

val wrapIndividualNodes = new RewriteRule {
  override def transform(n: Node): NodeSeq = {
    ...
    val nodesToRemove = "category"
->  val origElem = Elem(null, n.label, n.attributes, n.scope, false, n.child:_*)
    val editedElem = origElem.copy( child = origElem.child.filterNot(_.label == nodesToRemove))
    ...
  }
}

您可以从节点构造Elem,如下所示:

Elem.apply(node.prefix, node.label, node.attributes, node.scope, true, node.child :_*)

确保你真正看到的是Elem,而不是Node-Node是Elem的超集,包括其他东西,例如空白-将空白视为Elem是没有意义的,我认为如果你尝试这样做,你会得到一个例外。

但如果你保证得到一个Elem,例如在模式匹配后,使用node.asInstanceOf[Elem]是合理的。

最新更新