热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Scala中将地图转换为节点?

我有一个Map[String,List[String]]类型的数据,并想另存为Scala中的xml

我有一个Map[String,List[String]]类型的数据,并想另存为Scala中的xml文件。如果选择使用scala.xml.XML.save方法,则需要将map转换为node。

但是我没有找到一种方法。似乎地图或节点库中没有方法可以做到这一点。


您必须手动创建转换器,因为xml可以完全不同,这是您可以使用的示例。

import scala.xml.{Node,NodeSeq}
val a:Map[String,List[String]] = Map("animal" -> List("cat","dog","bird"),"fruit" -> List("banana","apple"))
def convertToXML(parametersToCreateXML: Map[String,List[String]]): NodeSeq = {
def generateTitleToData(keyValue: (String,List[String])): Node = {

{keyValue._1}

{keyValue._2.map(x =>generateData(x))}


}
def generateData(value: String): Node = {

{value}

}
parametersToCreateXML.map(x => generateTitleToData(x)).toSeq
}
convertToXML(a)
res0: scala.xml.NodeSeq =
NodeSeq(
animal


cat

dog

bird


,
fruit


banana

apple


)

如您所见,从Seq[Node]NodeSeq的转换是隐式完成的。

,

您还可以尝试下一个库:https://github.com/mthaler/xmlconfect-与其他编解码器库(例如,circe,Play Json等)类似的想法-它通过隐式类型基于类型构建编解码器。
您的情况如下所示:

import scala.xml.PrettyPrinter
import com.mthaler.xmlconfect._
import com.mthaler.xmlconfect.ProductFormatInstances._
import com.mthaler.xmlconfect.BasicTextFormats._
import com.mthaler.xmlconfect.CollectionFormats._
object XmlFormat {
type RawData = Map[String,List[String]]
case class TypedDataElement(item: String)
object TypedDataElement {
implicit val format: XmlElemFormat[TypedDataElement] = xmlFormat1(TypedDataElement.apply)
}
case class TypedDataNode(key: String,item: List[TypedDataElement])
object TypedDataNode {
implicit val format: XmlElemFormat[TypedDataNode] = xmlFormat2(TypedDataNode.apply)
}
case class AllTypedData(data: List[TypedDataNode]) {
def toRawData: RawData = {
data.map(item => item.key -> item.item.map(_.item)).toMap
}
}
object AllTypedData {
implicit val format: XmlElemFormat[AllTypedData] = xmlFormat1(AllTypedData.apply)
def fromRaw(raw: RawData): AllTypedData = {
val all = raw.toList.map {
case (key,values) => TypedDataNode(key,values.map(TypedDataElement.apply))
}
AllTypedData(all)
}
}
def main(args: Array[String]): Unit = {
val rawData: RawData = Map("node" -> List("value1","value2"))
val typedData = AllTypedData.fromRaw(rawData)
val printer = new PrettyPrinter(80,4)
println(printer.formatNodes(typedData.toNode))
}
}

引入了案例类以提供键名。

在这种情况下的结果输出为:



node
value1
value2



推荐阅读
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
  • Predicting Future Outcomes to Enhance Decision-Making and Action Planning
    通过预测未来结果以优化决策和行动计划。本文探讨了通过机器学习方法预测未来事件,从而提升决策质量和行动效率的策略。作者Alexey Dosovitskiy和Vladlen Koltun提出了一种新的模型,该模型能够通过预测未来的多步状态来指导智能体采取更有效的行动。实验结果显示,这种方法在多种任务中显著提高了性能,为实际应用提供了有力支持。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
author-avatar
月光魔术师2702935955
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有