2012-05-07 5 views
0

Je suis supposé convertir un petit fichier texte plat (txt) en XML pour un programme que je cours dans Scala mais je ne sais pas par où commencer. J'ai essayé différentes méthodes mais j'ai des problèmes jusqu'ici. Mon fichier est de quelques chaînes et plusieurs entiers. Je suis toujours en train d'utiliser Scala très basique, donc plus c'est simple, mieux c'est!Convertir un fichier txt en XML dans Scala

Merci d'avance à tous ceux qui aident.

+3

Nous avons besoin de beaucoup plus d'informations. À quoi ressemble votre fichier texte? Quel genre de XML voulez-vous produire? –

+0

@RayToal a raison. Cependant, je vous recommande de regarder d'abord Parser Combinator, qui est un moyen de créer un DSL externe; après avoir avalé le fichier texte par exemple.Pour un usage ultérieur, vous serez potentiellement interessé par Iteratee qui vous donnera plus de contrôle lors de la compilation du texte en xml –

+0

@andypetrella pour le fichier avec quelques chaînes de combinateurs d'analyseurs syntaxiques pourrait être une surpuissance –

Répondre

-3

Je ne sais pas exactement ce que vous essayez de faire. Si vous vouliez simplement envelopper les valeurs, vous pourriez le faire de la manière suivante:

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

valeurs dans le fichier texte n'a pas d'informations de type, Je suppose que –

+0

Oui, vous avez raison. Mais vous pouvez également remplacer les cas par des Regex. Comme je l'ai dit, je ne sais pas ce que vous essayez de faire. –

+0

Vous devez utiliser le littéral XML intégré de Scala au lieu de composer du XML avec des chaînes. –

4

Il ya plusieurs étapes à cela. D'abord, je déterminerais la structure indépendante des formats des données et créer une classe Scala pour contenir ces données. Ensuite, je devrais comprendre comment ces données sont formatées dans le fichier texte, et écrire une routine pour analyser le fichier texte et peupler la classe (ou éventuellement une liste de cette classe) avec les données. Et enfin, déterminez le schéma du fichier XML et écrivez-y les données en utilisant les littéraux XML de Scala.

Supposons que vos données comprennent le nom, l'âge, la taille et le poids d'une personne. Une classe Scala de tenir que les données pourraient ressembler à:

case class Person(name: String, age: Int, height: Double, weight: Double) 

Dans un fichier texte, cela pourrait être représenté de plusieurs façons, de la plus simple:

Peter 
34 
178.2 
83.2 

ou un format de style « Propriétés »:

name = Peter 
age = 34 
weight = 178.2 
height = 83.2 

ou le format CSV le plus probable, si vous avez plusieurs personnes dans un seul fichier:

Peter,34,178.2,83.2 
Tom,53,182.3,95.3 
John,27,175.1,74.5 

Prenons le dernier format comme exemple. La façon la plus simple de lire le fichier est comme ceci:

val lines = io.Source.fromFile(new java.io.File("test.txt")).getLines.toList 

Parse Ensuite, chaque ligne en une personne:

val persons = lines map { line => 
    val elements = line split "," 
    Person(elements(0), elements(1).toInt, elements(2).toDouble, elements(3).toDouble) 
} 

Ajouter une méthode agréable sur la classe de personne pour le transformer en une XML décent:

def toXml = 
     <person> 
      <name>{ name }</name> 
      <age>{ age }</age> 
      <height>{ height }</height> 
      <weight>{ weight }</weight> 
     </person> 

et carte enfin la liste des personnes à XML:

val personsXml = <persons>{ persons map(_.toXml) }</persons> 

Et écrire dans un fichier:

new java.io.FileOutputStream(new java.io.File("test.xml")).write(personsXml.toString.getBytes) 

Notez que-la gestion des erreurs et la fermeture des fichiers est laissé comme un exercice pour le lecteur! :)

Questions connexes