Exportation d'un CSV en XML
Bonjour,
J'ai récemment fait appel au Forum pour résoudre un problème et je ne l'ai pas regretté puisque "Sankasssss" m'a apporté la solution (encore merci ! :ccool:).
Je suis toujours en cours de rédaction d’un code en VB.NET qui me permettrait d’exporter les données d’un fichier CSV en fichier XML.
Pour l’instant le code ci-dessous me permet de le faire mais seulement avec une structure XML unique (non adaptative).
Le fichier CSV possède les champs suivants : « Nom »;« Type »;« Abscisse1 »;« Ordonnée1 »;« Abscisse2 »;« Ordonnée2 »
Lorsque le Type est « POINT», il ne nécessite qu’un seul champ Abscisse et Ordonnée, ce qui donne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Private Sub CsvToXml()
Dim CheminFichierSource As String = "C:/Test.csv" 'Chemin du fichier CSV
Dim CheminFichierXML As String = "C:/Test.xml" 'Chemin du fichier XML
Dim TexteCSV As String() 'Texte du Fichier source
Dim StructureXML As XElement 'Structure XML à générer
'Déclarer le flux de fichier en mode "Création" (Fichier XML) pour écraser éventuellement
'le fichier qui porterait le même nom (partir d'un fichier vide avant son remplissage)
'puis le fermer
Dim CreerFichierXML As New FileStream(CheminFichierXML, FileMode.Create)
CreerFichierXML.Close()
'Affecter à la variable "TexteCSV" le contenu du Fichier source
TexteCSV = File.ReadAllLines(CheminFichierSource)
'Déclarer le flux de fichier en mode "Ecriture" (Fichier XML)
Dim EcrireFichierXML As New StreamWriter(CheminFichierXML)
'Affecter à la variable "StructureXML" la structure XML pour un Type POINT
StructureXML = _
<Root>
<%= From strs In TexteCSV _
Let fields = Split(strs, ";") _
Select _
<Geometrie>
<Nom><%= fields(0) %></Nom>
<Type><%= fields(1) %></Type>
<Caracteristiques>
<Coordonnees>
<Abscisse><%= fields(2) %></Abscisse>
<Ordonnee><%= fields(3) %></Ordonnee>
</Coordonnees>
</Caracteristiques>
</ Geometrie >
%>
</Root>
'Ecrire le fichier XML puis fermer le fichier
EcrireFichierXML.WriteLine(StructureXML)
EcrireFichierXML.Close()
End Sub |
Maintenant, ce que je voudrais faire : c'est que lorsque le Type (dans une ligne du fichier CSV) est « SEGMENT », la structure XML s'adapte et devienne celle-ci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
'Affecter à la variable "StructureXML" la structure XML pour un Type SEGMENT
StructureXML = _
<Root>
<%= From strs In TexteCSV _
Let fields = Split(strs, ";") _
Select _
<Geometrie>
<Nom><%= fields(0) %></Nom>
<Type><%= fields(1) %></Type>
<Caracteristiques>
<Coordonnees>
<Abscisse><%= fields(2) %></Abscisse>
<Ordonnee><%= fields(3) %></Ordonnee>
</Coordonnees>
</Caracteristiques>
<Caracteristiques>
<Coordonnees>
<Abscisse><%= fields(4) %></Abscisse>
<Ordonnee><%= fields(5) %></Ordonnee>
</Coordonnees>
</Caracteristiques>
</ Geometrie >
%>
</Root> |
Voilà, je ne sais pas si plusieurs structures XML peuvent être ainsi déclarées à partir de la transformation d'un seul fichier CSV.
Merci de m'éclairer s'il existe une solution simple (je suis débutant ...)
Ajout de l'id de la structure dans la balise CODE => [CODE=xml]
Moi je verrais plus un truc du genre :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<Caracteristiques>
<Coordonnees>
<Abscisse><%= fields(2) %></Abscisse>
<Ordonnee><%= fields(3) %></Ordonnee>
</Coordonnees>
<Coordonnees>
<Abscisse><%= fields(4) %></Abscisse>
<Ordonnee><%= fields(5) %></Ordonnee>
</Coordonnees>
</Caracteristiques> |