我有一个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]
是合理的。