J'ai besoin de convertir un CSV en un document XML. Les exemples que j'ai vus jusqu'à présent, tous montrent comment procéder avec un nombre fixe de colonnes dans le CSV.
Je l'ai jusqu'à présent, à l'aide de LINQ: P>
String[] File = File.ReadAllLines(@"C:\text.csv");
String xml = "";
XElement top = new XElement("TopElement",
from items in File
let fields = items.Split(';')
select new XElement("Item",
new XElement("Column1", fields[0]),
new XElement("Column2", fields[1]),
new XElement("Column3", fields[2]),
new XElement("Column4", fields[3]),
new XElement("Column5", fields[4])
)
);
File.WriteAllText(@"C:\xmlout.xml", xml + top.ToString());
5 Réponses :
<TopElement>
<Item>
<Column0>A</Column0>
<Column1>B</Column1>
<Column2>C</Column2>
</Item>
<Item>
<Column0>D</Column0>
<Column1>E</Column1>
<Column2>F</Column2>
</Item>
<Item>
<Column0>G</Column0>
<Column1>H</Column1>
</Item>
</TopElement>
Assez proche. Mais j'ai besoin de scinder le mot de l'émission sur chaque ligne séparée par A; Donc, la sortie XML ressemblerait à ceci comme ceci: <élément>
@SOeren: N'est-ce pas ce que ma solution fait? J'ai ajouté un exemple de clarification.
Cela fonctionne bien. La partie ligne.split (';') n'était pas dans le premier exemple et j'ai essayé de l'ajouter moi-même. Je ne savais tout simplement pas comment l'ajouter. J'ai besoin d'étudier cette linq de plus. Merci de votre aide.
Super post ... Bits et morceaux d'occasion pour la mienne et ça a fonctionné parfaitement
Cela m'a sauvé beaucoup de temps. Merci pour cette grande solution!
Répondant un peu tard, mais si vos colonnes peuvent contenir le délimiteur dans une colonne citée, sachez que la chaîne .Split () ne fait pas attention aux cordes citées. Exemple: var x = "\" cité; string \ ""; var mots = x.split (';'); mots [0]; // "mots cités [1]; //" String "Donc, si votre délimiteur est un caractère courant, vous aurez des colonnes supplémentaires de données.
@DTB si j'ai besoin "a; b" code> comme élément unique
Salut @dtb, bonne solution. Mais je me demandais comment ajoutons-nous les colonnes comme éléments d'étiquette d'auto-fermeture afin qu'ils soient
Si vous souhaitez utiliser les en-têtes comme noms d'éléments:
Y a-t-il de toute façon pour convertir cet exemple en Json?
J'ai écrit une classe qui dérive de l'extrait de Vlax. De plus, j'ai fourni un test d'unité pour documenter le flux de travail.
CSV à XML: forte> p> J'ai prolongé la solution de Vlax en supprimant une virgule de fuite pour chacune des entrées de la ligne CSV qui a provoqué une exception d'exécution basée sur un indice étant hors limites par rapport à l'en-tête de colonne. P> P>
Excellente mise en œuvre!
Le code fonctionne bien, mais cela ne fonctionne pas au cas où j'ai une valeur séparée de virgule dans mon CSV.
Cinchoo ETL - une bibliothèque open source disponible pour faire la conversion de CSV en XML Facilement avec peu de lignes de code
pour un échantillon CSV: p> sortie xml: p> Code de paiement Pour une aide supplémentaire. P> Disclaimer: Je suis l'auteur de cette bibliothèque. P> p>
Voici une solution sans utiliser de linq imbriqué, plus simple à comprendre.
Le contenu de Le code pour le processus: p> Après avoir exécuté le code, le résultat est ci-dessous: p> INPUT.CSV code>: p> Programme.cs code> p>