Scala中的XML转换

Scala中的XML转换,xml,scala,zipper,Xml,Scala,Zipper,我现在正在处理XML转换。比如说, 替换所有节点和规则转换器。我扩展了RewriteRule,并将其传递给RuleTransformer实例,该实例将规则应用于XML 我知道这项工作还有其他工具:镜头,拉链,等等。它们可以根据我的需要转换XML吗?与我目前的方法相比,它们的优势是什么?首先要补充一点:Scala XML场景非常令人伤心。很有希望,但现在大部分都被放弃了(但我不确定这种发展有多积极)。不过,反XML确实有这样的功能,可以让您编写如下内容: import com.codecommi

我现在正在处理XML转换。比如说,

  • 替换所有节点
    规则转换器
    。我扩展了
    RewriteRule
    ,并将其传递给
    RuleTransformer
    实例,该实例将规则应用于XML


    我知道这项工作还有其他工具:
    镜头
    拉链
    ,等等。它们可以根据我的需要转换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
    实现)是我上面列出的xml转换的正确抽象吗?我不知道“正确”的抽象。透镜在许多方面与拉链相似,在某些方面更好,但我不知道在Scala中有什么好的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>