我應該將一個小的平面文本(txt)文件轉換爲XML,以用於我在Scala中運行的程序,但不知道從哪裏開始。我嘗試了各種方法,但到目前爲止遇到了麻煩。我的 文件是幾個字符串和幾個整數。在Scala中將txt文件轉換爲XML
我仍然使用非常基本的Scala,所以越簡單越好!
在此先感謝任何有幫助的人。
我應該將一個小的平面文本(txt)文件轉換爲XML,以用於我在Scala中運行的程序,但不知道從哪裏開始。我嘗試了各種方法,但到目前爲止遇到了麻煩。我的 文件是幾個字符串和幾個整數。在Scala中將txt文件轉換爲XML
我仍然使用非常基本的Scala,所以越簡單越好!
在此先感謝任何有幫助的人。
我不知道你到底想要做什麼。如果你只是想包裝這些值,你可能會這樣做:
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>"
}
文本文件中的值沒有類型信息,我猜 –
是的你是對的。但你也可以用一些正則表達式替換這些情況。正如我所說,我不知道你在做什麼。 –
您應該使用Scala的內置XML文字,而不是用字符串組合XML。 –
有幾個步驟。
首先,我要確定數據的格式無關結構並創建一個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)
注意,錯誤處理和文件的正確關閉就留給讀者自己練習! :)
我們需要更多的信息。你的文本文件是什麼樣的?你想要製作什麼樣的XML? –
@RayToal是對的。不過,我建議你首先看看Parser Combinator,這是一種創建外部DSL的方法;例如在誹謗文本文件之後。對於進一步的用法,你可能會被Iteratee抓住,這將給你更多的控制,同時從文本編譯到xml –
@andypetrella對於帶有幾個字符串的文件解析器組合器可能是一個過度衝擊 –