在Scala中将txt文件转换为XML

时间:2012-05-07 04:44:25

标签: xml scala file-conversion

我应该将一个小的平面文本(txt)文件转换为XML,用于我在Scala中运行但不知道从哪里开始的程序。我尝试了各种方法,但到目前为止遇到了麻烦。我的 文件有几个字符串和几个整数。

我仍在使用非常基本的Scala,所以越简单越好!

提前感谢任何帮助过的人。

2 个答案:

答案 0 :(得分:4)

这有几个步骤。

首先,我确定数据的格式无关结构,并创建一个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

然后将每一行解析为Person:

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)

请注意,错误处理和正确关闭文件留给读者练习! :)

答案 1 :(得分:-3)

我不知道你到底要做什么。如果您只想包装值,可以这样做:

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>"
}