加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中编组/解组XML

发布时间:2020-12-16 09:19:31 所属栏目:安全 来源:网络整理
导读:我正在考虑在 Scala和XML之间编组/解组数据的各种方法,我有兴趣获得社区反馈(最好基于第一手知识/经验). 我们目前正在使用JAXB,这是很好的,但我希望有一个纯粹的Scala解决方案.我正在考虑以下方法: 使用Scala的内置XML设施:Scala- XML很容易,但我猜测另一
我正在考虑在 Scala和XML之间编组/解组数据的各种方法,我有兴趣获得社区反馈(最好基于第一手知识/经验).

我们目前正在使用JAXB,这是很好的,但我希望有一个纯粹的Scala解决方案.我正在考虑以下方法:

>使用Scala的内置XML设施:Scala-> XML很容易,但我猜测另一个方向会相当痛苦.另一方面,这种方法支持任意翻译逻辑.
>数据绑定:scalaxb似乎有些不成熟的时刻,不处理我们当前的架构,我不知道任何其他数据绑定库Scala.像JAXB一样,需要额外的翻译层来支持涉及的转换.
> XML pickler组合器:GData Scala Client库提供XML pickler组合器,但最近的项目活动一直很低,我不知道当前的状态是什么.

问题:

您对我上市的方法/图书有什么经验?
>每个的相对优点和缺点是什么?
>有什么其他方法或Scala图书馆,我应该考虑?

编辑:

在我自己对这个问题的回答中,我添加了一些关于我早期对腌菜机组合器的印象的笔记,但是对于深入了解各种方法的人的反馈,我仍然很感兴趣.我希望的是一个有点全面的比较,这将有助于开发人员根据自己的需要选择正确的方法.

解决方法

我建议使用Scala的内置XML功能.我刚刚实现了一个文档结构的反序列化,如下所示:

val bodyXML = <body><segment uri="foo"><segment uri="bar" /></segment></body>

请注意,段可以彼此嵌套.

实施细分如下:

case class Segment(uri: String,children: Seq[Segment])

为了反序列化XML,您可以这样做:

val mySegments = topLevelSegments(bodyXML)

…和topLevelSegments的实现只是几行代码.注意递归,它挖掘了XML结构:

def topLevelSegments(bodyXML: Node): Seq[Segment] = 
    (bodyXML  "segment") map { nodeToSegment }

def nodeToSegment = (n: Node) => Segment((n  "@uri")(0) text,childrenOf(n))

def childrenOf(n: Node): Seq[Segment] = (n  "segment") map { nodeToSegment }

希望有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读