XML in SQL schreiben

Genkin

Benutzer
Beiträge
7
Hallo,
ich habe eine XML Datei die ich in SQL umschreiben will:

<verkehrstage>
<tag="Mo" verkehrt="1"></tag>
<tag="Di" verkehrt="1"></tag>
<tag="Mi" verkehrt="1"></tag>
<tag="Do" verkehrt="1"></tag>
<tag="Fr" verkehrt="1"></tag>
<tag="Sa" verkehrt="1"></tag>
<tag="So" verkehrt="0"></tag>
<tag="Feiertage" verkehrt="0"></tag>
</verkehrstage>

So, Oberklasse ist "verkehrstage".
CREATE Verkehrstage...

Aber wie schreibe ich die Unterklasse "tag" rein?

Am liebsten würde ich die XML in eine SQL Datenbank konvertieren. Habe viel gegooglet, aber nix brauchbares gefunden. Bin über jede Hilfe diesbezüglich dankbar.

Gruß
 
Werbung:
"tag" ist eine Spalte in Deiner Tabelle die einen Primary key darstellt, "Mo" und "verkehrt" sind normale Spalten. Allerdings entsteht daraus, falls das ein reales Projekt sein soll, ein suboptimales Tabellendesign (denk z.B. mal an andere Sprachen).
 
Erstmal solltest du großen Wert auf korrekte und auch gute XML-Syntax legen, dazu
XML Attributes
Richtiger wäre auf jedenfall
Code:
<verkehrstage>
<tag kalender="Mo" verkehrt="1">Daten</tag>
</verkehrstage>
und besser
Code:
<verkehrstage>
<tag>
<kalender>Mo</kalender><verkehrt>1</verkehrt>
</tag>
</verkehrstage>
SQL hat zunächst mal XML als Datentyp und damit kann man dann auch einiges an Funktionen abbilden und eben Tabellen aus den Daten machen. Ob SQLite da was bietet weiß ich nicht.
 
Grundsätzlich ist die Entscheidung zwischen Attribut bzw. verschachtelten Tags auch ein bisschen eine Geschmacksfrage. Wenn die Werte wirklich nur skalare Werte sind, spricht meiner Meinung nach nichts dagegen Attribute zu verwenden. Letztendlich spielt es z.B. bei der Verwendung von XSLT oder XPATH eine Rolle was man bevorzugt.

Den Namen "kalender" finde ich verwirrend, ich würde vermutlich eher "wochentag" verwenden (ob als Attribut oder Tag spielt keine Rolle). Unter "Kalender" erwarte ich mehr als "nur" die Angabe eines Wochentages.

Für "Wahrheitswerte" verwende ich lieber true/false als 0/1 - aber auch das ist wieder eine Geschmacksfrage.

Um eine XML Datei in eine Datenbank zu "konvertieren" gibt es mehrere Möglichkeiten:
  1. Verwende XSLT um aus dem XML ein Text/CSV Datei zu machen, dann importiere diese Datei in die Datenbank
  2. Verwende XSLT um aus dem XML eine Reihe von INSERT Befehlen zu generieren die man ausführen kann
  3. Importiere die XML Datei in eine Tabelle der Datenbank, dann verwende die XML Funktionen der Datenbank um die XML Datei zu zerlegen und die Daten in die verschiedenen Tabellen einzufügen (aber soweit ich weiß kann SQLite das nicht)
 
Hallo,
die XML ist so vorgegeben! Da wurden auch absichtlich Strickfallen eingebaut, z.B fehlt ein tag...
Ich habe diverse online konverter probiert, aber keine akzeptiert die XML.

Ich verstehe nicht, wie ich

...
<verkehrstage>
<tag="Mo" verkehrt="1"></tag>
....
in SQL umformulieren kann.. Verkehrstage wäre ja die Spalte, der Rest dann die Einträge? Aber "Mo" und "1" wären ja dann zwei Einträge in einer Spalte ?!


Ich wäre überaus dankbar wenn mir jemand die XML in SQL umschreiben könnte !
 
Wie Walter schon schrieb: <tag="Mo" verkehrt="1"></tag> ist ungültiges XML. Du wirst keinen Tool finden was das verarbeiten kann.
 
Werbung:
Nur weil die Datei eine Endung a la .xml oder womöglich noch .html hat heißt das ja nicht das der Inhalt XML konform ist, was hier nicht der Fall ist.

Du hast zwei Möglichkeiten:
A) Du konvertiest den Inhalt in gültiges XML (das ginge in SQL mittels diversen Textfunktionen und in "Handarbeit" und nutzt dann XML Funktionen oder
B) du machst mit besagten Textfunktionen direkt Daten daraus.

Der Aufwand hängt sehr stark davon ab ob dein Dateiinhalt immer gleich aufgebaut ist und welche Teile variieren. Hier mal ein ganz einfaches Beispiel:
Code:
DECLARE   @data VARCHAR(MAX) = '<verkehrstage>
<tag="Mo" verkehrt="1"></tag>
<tag="Di" verkehrt="1"></tag>
<tag="Mi" verkehrt="1"></tag>
<tag="Do" verkehrt="1"></tag>
<tag="Fr" verkehrt="1"></tag>
<tag="Sa" verkehrt="1"></tag>
<tag="So" verkehrt="0"></tag>
<tag="Feiertage" verkehrt="0"></tag>
</verkehrstage>'

SELECT   try_convert(XML,@data),'nicht XML konform'

SET       @data = replace(@data,'<tag="','<tag attribut="')

SELECT   try_convert(XML,@data),'XML konform'
 
Zurück
Oben