【发布时间】:2011-01-13 23:12:21
【问题描述】:
我有一个这样的 NodeSeq:
<foo>
<baz><bar key1="value1" key2="value2">foobar</bar></baz>
Blah blah blah
<bar key1="value3">barfoo</bar>
</foo>
我想为所有bars 的属性添加一个新属性。我目前正在做:
val rule = new RewriteRule() {
override def transform(node: Node): Seq[Node] = {
node match {
case Elem(prefix, "bar", attribs, scope, content@_*) => Elem(prefix, "bar", attribs append Attribute(None, "newKey", Text("newValue"), scala.xml.Null) , scope, content:_*)
case other => other
}
}
}
但问题是它只适用于 1 个节点。我希望它在所有节点上递归工作,如果我在 for 循环内调用转换,我不能用新值替换它们,因为它们变得不可变。我该如何解决这个问题?
【问题讨论】:
-
我的实际解决方案是您在该线程中的答案的修改版本,非常感谢。