Wie kann ich den Export von Tabellen in richtige XML-Dateien von MSSQL oder Access automatisieren?


1

Wir haben einen Kunden, der Daten im XML-Format anfordert. Normalerweise ist dies nicht erforderlich, da wir normalerweise nur eine Access-Datenbank oder CSV-Dateien übergeben und das ist ausreichend. In diesem Fall muss ich jedoch den Export von korrektem XML aus einem Dutzend Tabellen automatisieren.

Wenn ich es aus SQL Server 2005 tun kann, wäre das bevorzugt. Aber ich kann nicht für das Leben von mir einen Weg finden, dies zu tun. Ich kann rohe XML-Daten ausgeben, aber dies ist nur ein Tag pro Zeile mit Attributwerten. Wir brauchen etwas, das die Struktur der Tabellen repräsentiert. Access hat einen Export im XML-Format, der unseren Anforderungen entspricht. Ich bin mir jedoch nicht sicher, wie dies automatisiert werden kann. Es scheint nicht in irgendeiner Weise durch SQL verfügbar zu sein, also versuche ich, den notwendigen Code aufzuspüren, um die XML durch ein Makro oder ein Vbscript zu exportieren.

Irgendwelche Vorschläge?

0

Es gibt eine Gliederung here eines Makros zum Exportieren von Daten aus einer Access-Datenbank in eine XML-Datei, die für Sie von Nutzen sein kann.

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

Der einfachste Weg, dies zu tun, dass ich denken könnte wäre, eine kleine App zu erstellen, um es für Sie zu tun. Sie können dies als einfaches WinForm-Skript ausführen und dann nur eine LinqToSql-dbml-Klasse verwenden, um Ihre Datenbank zu repräsentieren. In den meisten Fällen können Sie diese Objekte nur mit dem XmlSerializer-Namespace serialisieren. Gelegentlich ist es schwieriger, abhängig von der Komplexität Ihrer Datenbank. Lesen Sie diesen Beitrag für einige detaillierte Informationen über LinqToSql und Xml Serialisierung: http://www.west-wind.com/Weblog/posts/147218.aspx

Hoffe, dass hilft.


1

Sehen Sie sich die Verwendung von FOR XML AUTO an. Abhängig von Ihren Anforderungen müssen Sie möglicherweise EXPLICIT verwenden.

Als kleines Beispiel:

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

Dies wird ein verschachteltes XML-Dokument mit den Aufträgen innerhalb der Kunden generieren. Sie könnten dann SSIS verwenden, um das ziemlich leicht in eine Datei zu exportieren, würde ich denken. Ich habe es selbst nicht versucht.

  0

Dies gilt nicht aufhören zu bekommen mir, was ich brauche, aber ich habe einen Artikel über "FOR XML" in MSSQL2005 gefunden, von dem ich denke, dass er deckt, was ich brauche. 23 sep. 082008-09-23 19:58:10

  0

Ich wollte sagen ... danke, dass du mich auf die richtige Spur gebracht hast 23 sep. 082008-09-23 20:37:10


1

Wenn Sie ein Dokument anstelle eines Fragments benötigen, benötigen Sie wahrscheinlich eine zweiteilige Lösung. Beide Teile könnten jedoch in SQL Server ausgeführt werden.

Aus den Kommentaren zu Toms Eintrag sieht man, dass Sie das ELEMENTS-Argument gefunden haben, also erhalten Sie die Felder als untergeordnete Elemente und nicht als Attribute. Sie werden jedoch immer noch mit einem Fragment enden, weil Sie keinen Stammknoten erhalten werden.

Es gibt verschiedene Möglichkeiten, wie Sie damit umgehen können. SQL Server provides a method für die Verwendung von XSLT zum Transformieren von XML-Dokumenten, sodass Sie ein XSL-Stylesheet erstellen können, um das Ergebnis Ihrer Abfrage in ein Root-Element einzufügen. Sie können auch alles weitere hinzufügen, was das Schema des Kunden erfordert (vorausgesetzt, es ist eines vorhanden).

Wenn Sie einige Felder als Attribute und andere machen Elemente verlassen wollten, könnten Sie auch XSLT verwenden, um die Felder zu bewegen, so dass Sie mit so etwas wie dies könnte am Ende:

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