Scala中的XML转换
我现在正在处理XML转换。比如说,Scala中的XML转换,xml,scala,zipper,Xml,Scala,Zipper,我现在正在处理XML转换。比如说, 替换所有节点和规则转换器。我扩展了RewriteRule,并将其传递给RuleTransformer实例,该实例将规则应用于XML 我知道这项工作还有其他工具:镜头,拉链,等等。它们可以根据我的需要转换XML吗?与我目前的方法相比,它们的优势是什么?首先要补充一点:Scala XML场景非常令人伤心。很有希望,但现在大部分都被放弃了(但我不确定这种发展有多积极)。不过,反XML确实有这样的功能,可以让您编写如下内容: import com.codecommi
- 替换所有节点
和
。我扩展了规则转换器
,并将其传递给RewriteRule
实例,该实例将规则应用于XMLRuleTransformer
我知道这项工作还有其他工具:
,镜头
,等等。它们可以根据我的需要转换XML吗?与我目前的方法相比,它们的优势是什么?首先要补充一点:Scala XML场景非常令人伤心。很有希望,但现在大部分都被放弃了(但我不确定这种发展有多积极)。不过,反XML确实有这样的功能,可以让您编写如下内容:拉链
import com.codecommit.antixml._ val myDoc = <foo><a/><c x="xxx"/><a bar="baz"><b/></a></foo>.convert def replaceA(e: Elem) = (e \\ "a").map(_.copy(name = "AAA")).unselect def replaceXxxC(e: Elem) = (e \\ "c").filter( _.attrs.get("x").exists(_ == "xxx") ).map(_ => <d y="xxx"/>.convert).unselect
导入com.codecommit.antixml_
val myDoc=也允许您执行此类操作,但它要复杂一些。谢谢。你认为拉链(作为一个抽象概念,而不仅仅是
实现)是我上面列出的xml转换的正确抽象吗?我不知道“正确”的抽象。透镜在许多方面与拉链相似,在某些方面更好,但我不知道在Scala中有什么好的XML实现。不过,我个人更愿意使用拉链,而不是标准图书馆的变形金刚。谢谢。我将尝试拉链,并将其与标准方法进行比较。反xml
scala> println(replaceA(myDoc)) <foo><AAA/><c x="xxx"/><AAA bar="baz"><b/></AAA></foo> scala> println(replaceXxxC(myDoc)) <foo><a/><d y="xxx"/><a bar="baz"><b/></a></foo>