la conversion de csv vers xml avec un xsd
Je suis en train d'essayer de trouver une réutilisables manière de prendre un fichier CSV et de générer un fichier XML à partir de ce qui est conforme à un XSD spécifié. Je n'ai pas vraiment trouvé de réutilisables pour cette approche. J'ai utilisé Altova MapForce qui me permet d'importer un fichier CSV et XSD, faire la cartographie de générer du code à partir de cela, mais le code doit être régénéré à chaque fois que le XSD changements. Altova produit une grande quantité de code.
Mon idéal serait un ensemble de classes Java qui je peux donner un fichier CSV, XSD et d'obtenir un fichier XML. Je ne peux pas trouver quelque chose comme cela et si je suis en train de réfléchir potentiellement de créer quelque chose.
Idées? Est-il quelque chose ici à l'aide de XSLT basé sur cette question?
Grâce.
Vous devez également spécifier quelle version de XSLT vous êtes limité dans l'utilisation de (v1 ou v2?) - cela fait une grosse différence pour la meilleure réponse. Aussi, êtes-vous limité à un seul fournisseur (laquelle?), ou avez-vous besoin d'un vendeur/plate-forme indépendante de solution?
OriginalL'auteur Casey | 2009-11-04
Vous devez vous connecter pour publier un commentaire.
Cela semble être quelque chose qui serait facile à faire, mais il ne l'est pas. Le Schéma XML est un document de validation de la langue, pas un document de la production de la langue. Elle ne vous dit pas comment créer un nouveau document; il vous indique si oui ou non le document que vous faites est valide. Ceux-là ne sont pas la même chose par un long shot.
Par exemple, il est trivial de créer un type complexe dans le Schéma XML qui consiste en une séquence d'option de choix. Un
foo
élément peut avoir unebar
oubaz
enfant, puis soit unbaz
oubat
enfant, puis unfoo
,bar
, oubat
enfant. Ce qui rend pour une règle que l'on peut déterminer que ces deux éléments sont valides:Dans le même temps, que la règle vous donne à peu près nulle aider à déterminer la façon de prendre un n-uplet d'éléments de données et créer un
foo
élément.Généralement, quand quelqu'un pose cette question, ils sont à la recherche à un ou deux schémas de l'utilisation qui définissent relativement simple de la structure du document. Il semble intuitif que cela devrait être simple à utiliser ces schémas comme entrée dans un processus de cartographie. C'est probablement le cas. Ce n'est pas facile, ni même possible, est un processus de cartographie qui peut prendre tout schéma comme une entrée.
Ce que j'ai fait au lieu de cela, dans mes projets, est de simplifier le problème. J'ai construit les programmes qui utilisent XML et CSV et et le soutien de la validation du schéma, mais dans ces programmes, le schéma est une sortie. J'ai défini un simple XML format de métadonnées, par exemple:
Alors je peux utiliser les métadonnées pour contrôler XML production de CSV en entrée, et je peux aussi de l'utiliser pour produire un schéma XML de mon programme produit sera conforme aux. Si je change de métadonnées, mon XML et le schéma change en conséquence.
Bien sûr, si les schémas sont vraiment une entrée de votre processus (par exemple, ils sont fournis par un tiers), ce ne sera même pas commencer à vous aider.
Je ne suis pas d'accord que ce n'est pas une chose facile à faire. C'est une chose facile à faire. C'est un problème commun et il a été résolu (pour XSLT v2 utilisateurs).
Bien sûr, vous pouvez passer par un schéma et, en sautant les éléments optionnels, et toujours la cueillette de la première option de tout temps il y a un choix, vous pouvez produire un document qui est conforme au schéma. Mais un schéma peux seulement vous dire ce document XML à générer à partir d'un fichier CSV si il y a d'autres métadonnées (par exemple les en-têtes dans les fichiers CSV et les règles de la cartographie des titres pour les noms d'élément et les conventions sur les éléments facultatifs) d'ailleurs ce qu'un schéma XML contient. Sans cela, non seulement c'est pas facile, il n'est pas possible.
OriginalL'auteur Robert Rossney
Bien, je n'ai pas vraiment d'un ready-made out-of-the-box solution pour cela, mais peut-être:
lire votre fichier CSV avec une bibliothèque comme FileHelphers; pour cela, vous devez créer une classe
MyDataType
qui décrit les colonnes du fichier CSV, et vous obtenez un tableau deMyDataType
si vous décorez la classe avec la bonne attributs de sérialisation XML comme
[XmlIgnore]
,[XmlAttribute]
et ainsi de suite, vous pourriez être en mesure de simplement sérialiser le tableau résultant deMyDataType
dans un document XML est conforme à votre schéma XMLou si cela ne fonctionne pas, vous pouvez créer une autre classe qui correspond à votre XML exigences (il génère de l'XSD vous avez), et tout simplement de définir un mappage entre les deux types de
MyDataType
(à partir de votre CSV) etMyXmlDataType
(pour votre XML) avec quelque chose comme AutoMapperCe n'est pas de la chaudière-plaque - mais assez proches, et vous pourriez peut-être faire c'est à peu près un "cadre" de simplement brancher vos propres types (si vous avez besoin de le faire souvent).
OriginalL'auteur marc_s
Si votre moteur XSLT est compatible avec XSLT version 2, alors la meilleure solution est ici:
OriginalL'auteur Sean B. Durkin
Ce que vous avez est un "tableau" (le fichier CSV) qui contient (probablement) dénormalisée lignes représentant (probablement) hiérarchique du modèle de données. Vous voulez une carte qui à l'arbitraire d'un document XML hiérarchique basé sur le XSD.
Vous aurez besoin d'un outil qui permet de cartographier le groupement des colonnes de clé pour les éléments XML et spécifier les données des colonnes aller dans lesquels les attributs/éléments enfants. C'est un assez grave problème, à moins que votre mappages sont triviales.
Pourriez-vous poster quelques échantillons de la CSV et XSD? Qui pourrait aider à obtenir davantage l'accent sur la réponse.
OriginalL'auteur Jim Garrison
Microsoft Excel est en mesure d'exporter XML: http://office.microsoft.com/en-us/excel-help/export-xml-data-HP010206401.aspx
J'ai eu quelques problèmes avec la création d'une exportable en format XSD, mais c'est vraiment un outil formidable, une fois que vous avez de travail.
OriginalL'auteur Rashelinu