我应该为我在 Scala 中运行但不知道从哪里开始的程序将一个小的平面文本 (txt) 文件转换为 XML。我尝试了各种方法,但到目前为止遇到了麻烦。我的文件是几个字符串和几个整数。
我仍在使用非常基本的 Scala,所以越简单越好!
提前感谢任何提供帮助的人。
我应该为我在 Scala 中运行但不知道从哪里开始的程序将一个小的平面文本 (txt) 文件转换为 XML。我尝试了各种方法,但到目前为止遇到了麻烦。我的文件是几个字符串和几个整数。
我仍在使用非常基本的 Scala,所以越简单越好!
提前感谢任何提供帮助的人。
有几个步骤。
首先,我将确定数据的格式独立结构并创建一个 Scala 类来保存这些数据。然后我会弄清楚这些数据在文本文件中的格式,并编写一个例程来解析文本文件并用数据填充类(或可能是该类的列表)。最后,找出 XML 文件的架构并使用 Scala 的 XML 文字将数据写入其中。
假设您的数据包含一个人的姓名、年龄、身高和体重。保存该数据的 Scala 类可能如下所示:
case class Person(name: String, age: Int, height: Double, weight: Double)
在文本文件中,这可以通过多种方式表示,从最简单的方式开始:
Peter
34
178.2
83.2
或“属性”样式格式:
name = Peter
age = 34
weight = 178.2
height = 83.2
或最可能的 CSV 格式,如果您在一个文件中有多个人:
Peter,34,178.2,83.2
Tom,53,182.3,95.3
John,27,175.1,74.5
我们以最后一种格式为例。读取文件的最简单方法是这样的:
val lines = io.Source.fromFile(new java.io.File("test.txt")).getLines.toList
然后将每一行解析成一个人:
val persons = lines map { line =>
val elements = line split ","
Person(elements(0), elements(1).toInt, elements(2).toDouble, elements(3).toDouble)
}
在 Person 类上添加一个不错的方法,将其转换为一些像样的 XML:
def toXml =
<person>
<name>{ name }</name>
<age>{ age }</age>
<height>{ height }</height>
<weight>{ weight }</weight>
</person>
最后将人员列表映射到 XML:
val personsXml = <persons>{ persons map(_.toXml) }</persons>
并将其写入文件:
new java.io.FileOutputStream(new java.io.File("test.xml")).write(personsXml.toString.getBytes)
请注意,错误处理和正确关闭文件留给读者练习!:)
我不知道你到底想做什么。如果你只是想包装这些值,你可以这样做:
def string2xml[A](a: A): String = a match {
case s: String => "<String>" + s + "</String>"
case i: Int => "<Int>" + i + "</Int>"
case any => "<Any>" + any + "</Any>"
}