Для этого есть несколько шагов.
Сначала я определял независимую от формата структуру данных и создавал класс Scala для хранения этих данных. Затем я выясню, как эти данные отформатированы в текстовом файле, и напишите процедуру для анализа текстового файла и заполните этот класс (или, возможно, список этого класса) данными. И, наконец, выяснить схему XML-файла и записать данные в него с использованием XML-литералов Scala.
Предположим, что ваши данные состоят из имени, возраста, высоты и веса человека. Класс 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; после того, как, например, сломал текстовый файл.Для дальнейшего использования вы потенциально будете interrested Iteratee, который даст вам больше контроля при компиляции из текста в xml –
@andypetrella для файла с несколькими комбинаторами парсеров строк может быть избыточным значением –