Comment puis-je automatiser l'exportation de tables dans des fichiers XML appropriés à partir de MSSQL ou Access?


1

Nous avons un client qui demande des données au format XML. Normalement, cela n'est pas nécessaire car nous ne faisons que transférer une base de données Access ou des fichiers csv, ce qui est suffisant. Cependant, dans ce cas, j'ai besoin d'automatiser l'exportation de XML approprié à partir d'une douzaine de tables. Si je peux le faire avec SQL Server 2005, ce serait préférable. Cependant, je ne peux pas pour la vie de moi trouver un moyen de le faire. Je peux extraire des données XML brutes, mais ce n'est qu'une balise par ligne avec des valeurs d'attribut. Nous avons besoin de quelque chose qui représente la structure des tables. L'accès a une exportation au format XML qui répond à nos besoins. Cependant, je ne suis pas sûr de savoir comment cela peut être automatisé. Il ne semble pas être disponible de quelque façon que ce soit via SQL, alors j'essaye de trouver le code nécessaire pour exporter le XML via une macro ou un script.

Des suggestions?

0

Il existe un contour here d'une macro utilisée pour exporter des données d'une base de données d'accès vers un fichier xml, ce qui peut vous être utile.

Const acExportTable = 0 

Set objAccess = CreateObject("Access.Application") 
objAccess.OpenCurrentDatabase "C:\Scripts\Test.mdb" 

'Export the table "Inventory" to test.xml 
objAccess.ExportXML acExportTable,"Inventory","c:\scripts\test.xml" 

0

La façon la plus simple de faire cela est de créer une petite application pour le faire pour vous. Vous pouvez le faire en tant que WinForm de base, puis utiliser simplement une classe LinqToSql dbml pour représenter votre base de données. La plupart du temps, vous pouvez simplement sérialiser ces objets en utilisant l'espace de noms XmlSerializer. Parfois, c'est plus difficile que cela en fonction de la complexité de votre base de données. Consultez ce post pour plus d'informations sur LinqToSql et Xml Sérialisation: http://www.west-wind.com/Weblog/posts/147218.aspx

Espérons que cela aide.


1

Examinez l'utilisation de FOR XML AUTO. Selon vos besoins, vous devrez peut-être utiliser EXPLICIT.

Par exemple rapide:

SELECT 
    * 
FROM 
    Customers 
INNER JOIN Orders ON Orders.CustID = Customers.CustID 
FOR XML AUTO 

Cela va générer un document XML imbriqué avec les commandes à l'intérieur des clients. Vous pouvez ensuite utiliser SSIS pour exporter cela dans un fichier assez facilement, je pense. Je ne l'ai pas essayé moi-même cependant.

  0

Cela ne quitte pas obtenir moi ce dont j'ai besoin mais j'ai trouvé un article sur "FOR XML" dans MSSQL2005 qui je pense couvre ce dont j'ai besoin. 23 sept.. 082008-09-23 19:58:10

  0

Je voulais dire ... merci de me mettre sur la bonne voie 23 sept.. 082008-09-23 20:37:10


1

Si vous voulez un document au lieu d'un fragment, vous aurez probablement besoin d'une solution en deux parties. Toutefois, les deux parties peuvent être effectuées dans SQL Server.

Il semble que vous ayez trouvé l'argument ELEMENTS dans les commentaires sur l'entrée de Tom, donc vous obtenez les champs comme des éléments enfants plutôt que des attributs. Vous allez quand même vous retrouver avec un fragment, car vous n'obtiendrez pas de nœud racine.

Il existe différentes façons de gérer cela. SQL Server provides a method pour l'utilisation de XSLT pour transformer des documents XML, de sorte que vous pouvez créer une feuille de style XSL pour envelopper le résultat de votre requête dans un élément racine. Vous pouvez également ajouter tout ce dont le schéma du client a besoin (en supposant qu'il en ait un).

Si vous vouliez quitter certains champs comme des attributs et de faire d'autres éléments, vous pouvez également utiliser XSLT pour déplacer ces champs, vous pourriez vous retrouver avec quelque chose comme ceci:

<customer id="204"> 
    <firstname>John</firstname> 
    <lastname>Public</lastname> 
</customer>