Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - XML Daten mit gleichnamigen Elementen einlesen


DigitalSpring - Mo 13.11.06 15:02
Titel: XML Daten mit gleichnamigen Elementen einlesen
Hallo!!
Ich habe ein Problem (wie wohl alle hier, die ein Thema erstellen ;) )...

Ich bekomme eineen XML-Report und will mit diesem eine Datenbank aktualisieren. also alle noch nicht vorhandenen "Row"-Elemente in eine Tabelle schreiben.

1.Beim einlesen in ein DataSet (und anzeigen in Datagrid) werden die gleichnamigen Elemente ignoriert. Also erhalte ich zwar eine Tabelle "row", aber ohne Zeilen. Das ist doof. Habs auch mit einer xsd versucht... ohne Erfolg. Hier XML Beispielcode:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
<?xml version="1.0" encoding="UTF-8"?>
<report time="2006-11-13 04:04">
  <matrix rowcount="2">
    <columns>
      <Name type="string">bla1</Name>
      <timeOfVisit type="datetime">timeOfVisit</timeOfVisit>
      <timeOfEvent type="datetime">timeOfEvent</timeOfEvent>
    </columns>
    <rows>
      <row>
  <Name>Blabla</Name>
  <timeOfVisit>2006-10-17 12:56</timeOfVisit>
  <timeOfEvent>2006-10-17 13:04</timeOfEvent>
      </row>
      <row>
  <Name>Blabla</Name>
  <timeOfVisit>2006-10-17 12:56</timeOfVisit>
  <timeOfEvent>2006-10-17 13:04</timeOfEvent>
      </row>
      <row>
  <Name>Blabla</Name>
  <timeOfVisit>2006-10-17 12:56</timeOfVisit>
  <timeOfEvent>2006-10-17 13:04</timeOfEvent>
      </row>
    </rows>
  </matrix>
</report>


2. Bisher kam ich noch nicht dazu mit mySQL loszulegen. Vielleicht ist mit eine einfachere Variante entgangen... wie würdet ihr aus obigem XML-Code alle "Row"-Elemente rausziehen, überprüfen ob diese in einer mySQL-Tabelle existiert und gegebenenfalls eintragen.

Spaltennamen können verschieden sein:
...FROM Reportdatentabelle
...WHERE UserName LIKE Blabla AND Visit..."

XML-Daten
1:
2:
3:
4:
5:
<row>
  <Name>Blabla</Name>
  <timeOfVisit>2006-10-17 12:56</timeOfVisit>
  <timeOfEvent>2006-10-17 13:04</timeOfEvent>
</row>


Wäre super wenn mir jemand helfen könnte... bin noch etwas grün hinter den Coder-Ohren.

Moderiert von user profile iconUGrohne: XML-Tags hinzugefügt.


UGrohne - Mo 13.11.06 18:13

Wie liest Du denn bisher die XML-Daten aus? MIt einem DataGrid hatte ich das bisher noch nicht versucht, daher musst Du mir da mal auf die Sprünge helfen.

Ich würde das Ganze per XMLDocument machen und manuell auslesen. Dort kannst Du dann in einer foreach-Schleife alle Elemente durchgehen, auch wenn sie gleich heißen. Ansonsten per NextSibling. Eventuell würde aber auch eine XPath-Anweisung funktionieren, aber damit hab ich bisher noch keine Erfahrungen gesammelt.