需要将scala Node转换为Elem

时间:2016-08-03 18:11:17

标签: xml scala

我有一个xml RewriteRule,我正在尝试修改传递的节点n。我想做一些像copy和amp;重命名n,但这些功能仅适用于Elem。

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

3 个答案:

答案 0 :(得分:0)

我希望找到一种比这更简单的方法,但我最终使用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))
    ...
  }
}

答案 1 :(得分:0)

您可以按如下方式从节点构建Elem:

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

答案 2 :(得分:0)

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

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

是合理的