私はScalaで動作しているが、どこから開始するのかわからない小さなフラットテキスト(txt)ファイルをXMLに変換することになっています。私はいろいろな方法を試しましたが、今のところ問題があります。私の ファイルは、いくつかの文字列といくつかの整数です。ScalaのtxtファイルをXMLに変換する
私はまだ非常に基本的なScalaを使用していますので、より簡単です!
お手数をおかけしますようお願い申し上げます。
私はScalaで動作しているが、どこから開始するのかわからない小さなフラットテキスト(txt)ファイルをXMLに変換することになっています。私はいろいろな方法を試しましたが、今のところ問題があります。私の ファイルは、いくつかの文字列といくつかの整数です。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>"
}
テキストファイルの値には、あなたが正しいと思います。 –
はい、そうです。しかし、ケースをいくつかのRegexで置き換えることもできます。私が言ったように、あなたが何をしようとしているのか分からない。 –
文字列でXMLを作成するのではなく、ScalaのビルトインXMLリテラルを使用する必要があります。 –
これにはいくつかのステップがあります。
まず、データの形式に依存しない構造を決定し、このデータを保持するScalaクラスを作成します。次に、このデータがテキストファイルでどのように書式設定されているかを調べ、テキストファイルを解析してクラス(または場合によってはそのクラスのリスト)にデータを入力するルーチンを作成します。最後に、XMLファイルのスキーマを見つけ出し、ScalaのXMLリテラルを使用して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形式、あなたが1つのファイルに複数の人物がある場合:
Peter,34,178.2,83.2
Tom,53,182.3,95.3
John,27,175.1,74.5
0を
例として最後のフォーマットを考えてみましょう。ファイルを読むための最も簡単な方法は、このようなものです:
val persons = lines map { line =>
val elements = line split ","
Person(elements(0), elements(1).toInt, elements(2).toDouble, elements(3).toDouble)
}
は、いくつかのまともなXMLにそれを回すためにPersonクラス上の素敵なメソッドを追加します:
val lines = io.Source.fromFile(new java.io.File("test.txt")).getLines.toList
が続い人にそれぞれの行を解析
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を作成する方法です。例えば、テキストファイルをスラップした後。さらなる使用法として、テキストからxmlにコンパイルするときにIterateeによってより多くの制御を与える可能性があります。 –
@といくつかの文字列を含むファイルの場合、パターコンバイナーは過度になる可能性があります –