0
我有一個類似於 的問題Scala - modifying nested elements in xml 我在這篇文章中轉載了相同的代碼。 我想修改元素中的內容,我必須調用一個函數來獲取內容。例如。修改xml內容scala
object test extends App {
val InputXml: Node =
<root>
<contents>
<version>1</version>
</contents>
</root>
object t1 extends RewriteRule {
override def transform(n: Node): Seq[Node] = {
println("transforming '" + n + "'")
n match {
case Elem(prefix, "version", attribs, scope, _*) =>
Elem(prefix, "version", attribs, scope, true, Text(computeVersion()))
case other => other
}
}
def computeVersion() = {
println("computeVersion called")
"3.0"
}
}
object rt1 extends RuleTransformer(t1)
val res = rt1(InputXml)
val pp = new PrettyPrinter(width = 2, step = 1)
Console println (pp format res)
}
輸出是:
transforming ' '
transforming '1'
transforming '<version>1</version>'
computeVersion called
transforming '<version>1</version>'
computeVersion called
transforming '1'
transforming '<version>1</version>'
computeVersion called
transforming '<version>1</version>'
computeVersion called
transforming '<contents> <version>3.0</version></contents>'
transforming ' '
transforming '1'
transforming '<version>1</version>'
computeVersion called
transforming '<version>1</version>'
computeVersion called
transforming '1'
transforming '<version>1</version>'
computeVersion called
transforming '<version>1</version>'
computeVersion called
transforming '<contents> <version>3.0</version></contents>'
transforming '<root><contents> <version>3.0</version></contents></root>'
<root><contents> <version>3.0</version></contents></root>
computeVersion()是越來越幾乎每一次所謂的,因爲複雜。我只希望在處理實際標記時調用它。我試圖通過模式匹配來包圍它,例如搜索<version>
,這實際上並不奏效。
有什麼建議嗎?
你能否給出更多的細節,也許可以解釋你接收到的錯誤。 – wwkudu
我已經更新了這個問題。 – user3044440
我看了一下,覺得很困惑。與RewriteRule的方式和改造工作有關,但還沒有時間來解開它。希望有更多知識淵博的人。 – wwkudu