热门标签 | 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



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
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社区 版权所有