需要将scala节点转换为Elem
问题描述:
我有一个xml RewriteRule,我试图修改通过的节点n
。我想做一些事情,如复制&重命名n
,但这些功能只能在Elem上使用。需要将scala节点转换为Elem
如何将节点n
转换为Enum?
答
我期望找到比这更容易的方法,但我最终使用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,而不是一个节点 - 节点是ELEM的超集,还包括其他像空白这样的东西 - 将空白视为Elem是没有意义的,我认为如果你尝试这样做,你会得到一个异常。
但是,如果您保证获得Elem例如模式匹配后,使用node.asInstanceOf[Elem]
是合理的。