2012-05-07 3 views
0

Я должен преобразовать файл с небольшим плоским текстом (txt) в XML для программы, которую я запускаю в Scala, но не знаю с чего начать. Я пробовал различные методы, но до сих пор у меня проблемы. Мой файл имеет несколько строк и несколько целых чисел.Преобразование txt-файла в XML в Scala

Я по-прежнему использую очень простой Scala, поэтому чем проще, тем лучше!

Заранее благодарим всех, кто помогает.

+3

Нам нужно гораздо больше информации. Как выглядит ваш текстовый файл? Какой XML вы хотите создать? –

+0

@RayToal является правильным. Однако я бы рекомендовал вам сначала взглянуть на Parser Combinator, что является способом создания внешнего DSL; после того, как, например, сломал текстовый файл.Для дальнейшего использования вы потенциально будете interrested Iteratee, который даст вам больше контроля при компиляции из текста в xml –

+0

@andypetrella для файла с несколькими комбинаторами парсеров строк может быть избыточным значением –

ответ

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

значения в текстовом файле не имеют информации о типе, Я думаю, –

+0

Да, вы правы. Но вы также можете заменить случаи с некоторым Regex. Как я уже сказал, я не знаю, что вы пытаетесь сделать. –

+0

Вместо встроенного XML со строками вы должны использовать встроенный XML-литерал Scala. –

4

Для этого есть несколько шагов.

Сначала я определял независимую от формата структуру данных и создавал класс 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) 

Обратите внимание, что обработка ошибок и правильное закрытие файлов остается в качестве упражнения для читателя! :)

Смежные вопросы