3
我有下面的XML:消除重複,更改標籤與scala.xml.transform.RuleTransformer
<tree>
<leaf id="1"/>
<leaf id="1"/>
</tree>
我希望做的是擺脫重複<leaf/>
S的(整個XML文檔) ,並配有單<new-leaf/>
像這樣替換它們:
<tree>
<new-leaf id="1"/>
</tree>
我已經寫了下面的RewriteRule
,我相信應該已經完成了這個(原諒有狀態):
import scala.xml._
import scala.xml.transform._
class UniqueLeaves extends RewriteRule {
var leafIds = Set.empty[String]
override def transform(node: Node): Seq[Node] = node match {
case e: Elem if ((e.label == "leaf") && !leafIds.contains((e \\ "@id").text)) => {
leafIds += (e \\ "@id").text
<new-leaf id={(e \\ "@id")} />
}
case e: Elem if (e.label == "leaf") => Seq.empty
case _ => node
}
}
不幸的是,使用RuleTransformer
給了我下面的:
scala> val tree = <tree><leaf id="1"/><leaf id="1"/></tree>
scala> println(new RuleTransformer(new UniqueLeaves).transform(tree))
<tree/>
我假定這是因爲RuleTransformer
calls transform
on the RewriteRule
multiple times,並且使用輸出非第一次調用<new-leaf>
節點,它返回一個空Seq
在我的比賽中。
希望有關使這項工作(以及無國籍)的任何提示。