2016-08-03 111 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]是合理的。