我有一个非常基本的问题,但似乎没有找到优雅的Scala方法来解决这个问题。
我想将编程生成的XML标记插入到我使用
从文件中读取的现有XML结构中xml.XML.loadFile(...)
在我如何创建一个XML根节点在Scala没有文字元素名称?我找到了这个方法来创建我的标签。
def textElem(name: String, text: String) = Elem(null, name, Null, TopScope, Text(text))
有XML树
<root>
<set start="christmas">
<data>
<val>ABC</val>
...
</data>
<custom>
<entry>DEF</entry>
<!-- APPEND HERE -->
</custom>
</set>
<set start="halloween">
...
</set>
</root>
如何从圣诞集中选择自定义部分,附加我的编程生成的XML标记并将整个XML树保存回文件?
谢谢你的帮助!
如何从圣诞集中选择自定义部分?
在Scala中,我们可以使用def \(that: String): NodeSeq
val custom = christmas \ "custom"
println("-- print custom element --")
println(custom)
println("-- end --")
输出:-- print custom element --
<custom>
<entry>DEF</entry>
<!-- APPEND HERE -->
</custom>
-- end --
Q。附加我的编程生成的XML标签
这将是有用的=> scala - XML插入/更新
这个链接=>用scala编程替换xml值
例如,我这样写:
看起来,transform
方法将使操作xml变得容易。
// Q. Append my programatically generated XML tags
// A. Use RewriteRule#transform
val rule = new AppendRule
val appended = rule.transform(christmas)
println("-- print custom element --")
println(pp.format(appended(0)))
println("-- end --")
}
}
class AppendRule extends RewriteRule {
override def transform(n: Node): Seq[Node] = n match {
case <entry>{v}</entry>
=> println(s"Find value in tag <entry> => $v")
<entry>ABC</entry>
<entry>{v}</entry>
case elem: Elem
=> elem copy (child = elem.child flatMap (this transform))
case other
=> other
}
}
输出:Find value in tag <entry> => DEF
-- print custom element --
<root>
<set start="christmas">
<data>
<val>ABC</val>
</data>
<custom>
<entry>ABC</entry>
<entry>DEF</entry>
<!-- APPEND HERE -->
</custom>
</set>
<set start="halloween"> </set>
</root>
-- end --
。将整个XML树保存回一个文件
A.请使用scala.xml.XML#save
- 完整源代码:
【魔杖盒】()