2011-04-01 3 views
1

Je reçois un fichier xml contenant beaucoup de données provenant d'un autre système logiciel. Je dois faire beaucoup de travail avec ces données, donc je voudrais transformer ces données XML en un modèle de domaine spécifique, ce qui me permet de travailler plus efficacement. J'ai donc besoin d'un mécanisme pour mapper les données xml au modèle de domaine et vice versa. Quelles sont mes possibilités, pouvez-vous compléter la liste?Transformer un fichier XML en un modèle de domaine

  • LINQ to XSD
  • mapping manuel sur LINQ to XML xml oder DOM
  • DataSets (Lecture/XML Write)!
  • ...?

Nous vous remercions à l'avance, mes meilleures salutations :-) Laurin

Edit: Simplement dit: Je veux faire ou de cartographie, mais au lieu d'un SGBD j'ai un fichier XML ;-)

+1

C'est un outil utile qui peut aider bien que je ne sais pas exactement ce que vous devez faire avec ce fichier xml. http://xsd2code.codeplex.com/ – pmcilreavy

+1

Xsd2Code fonctionnera en deux étapes - d'abord vous devrez utiliser xsd.exe pour générer un schéma pour le xml (en supposant que vous n'en ayez pas déjà un), puis utilisez Xsd2Code pour générer les modèles de domaine à partir du schéma. Xsd2Code a un commutateur de ligne de commande qui peut ajouter des méthodes serialize/deserialize aux classes de modèle, que vous pouvez utiliser pour charger les données .. disclaimer: Linq2Xml est probablement une solution plus simple si :) – MattDavey

Répondre

3

essayez d'utiliser Linq pour Xml. Votre mappeur ressemblera à du code suivant.

xml:

<contacts> 
    <contact contactId="2"> 
    <firstName>Barry</firstName> 
    <lastName>Gottshall</lastName> 
    </contact> 
    <contact contactId="3"> 
    <firstName>Armando</firstName> 
    <lastName>Valdes</lastName> 
    </contact> 
</contacts> 

code pour les données de charge:

XDocument loaded = XDocument.Load(@"C:\contacts.xml"); 

cartographie:

List<MyContact> contacts = (from c in loaded.Descendants("contact") 
    select new MyContacts() { 
           FirstName = (string)c.Element("firstName"), 
           LastName = (string)c.Element("lastName") 
          }).ToList(); 
0

Vous pouvez également implémenter System.Xml.Serialization.IXmlSerializable en supposant qu'il existe une relation un-à-un entre les modèles XML et vos objets. Il y a plus d'informations à Proper way to implement IXmlSerializable?

+0

Cette solution devrait être moins de code pour le cas simple , mais je pense que cela crée trop de couplage entre les objets et une façon spécifique de les représenter physiquement. Par exemple. Si vous utilisez plutôt le modèle Data Mapper, vous pouvez également utiliser d'autres formats "back end". Cela traiterait également plus proprement avec la migration d'une version des données sauvegardées vers une nouvelle version (bien que j'imagine que cela pourrait également être fait en redéfinissant Serialize et Deserialize?). –

0

sérialisation XML/désérialisation semble une bonne idée, si vous avez un domaine objet disponible.

En savoir plus sur XmlSerializer Class

+0

Comme je l'ai mentionné sur mon commentaire sur une réponse différente, je soupçonne que cette solution est trop fortement couplée, par rapport au modèle Data Mapper. –

Questions connexes