2016-08-03 36 views
2

我有一个xml RewriteRule,我试图修改通过的节点n。我想做一些事情,如复制&重命名n,但这些功能只能在Elem上使用。需要将scala节点转换为Elem

如何将节点n转换为Enum?

回答

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)) 
    ... 
    } 
} 
0

您可以从一个节点构建ELEM如下:

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

确保你真正寻找一个ELEM,而不是一个节点 - 节点是ELEM的超集,还包括其他像空白这样的东西 - 将空白视为Elem是没有意义的,我认为如果你尝试这样做,你会得到一个异常。

但是,如果您保证获得Elem例如模式匹配后,使用node.asInstanceOf[Elem]是合理的。