Zum Inhalt springen

xml auslesen und später in sql datenbank speichern


Empfohlene Beiträge

Geschrieben

Moinsen ihr alle,

ich beiß hier gleich in meinen Tisch!!

Ich möchte eigentlich nichts anderes, als eine xml datei die ich bekomme auslesen und dann die entsprechenden werte in einer sql datenbank ablegen.

Nun scheitere ich grade schon am auslesen der ... Daten!

Kann mir mal kurz einer sagen wo mein Denkfehler ist???

 XmlDocument document = new XmlDocument();

            document.Load(@"E:\test.xml");


            XmlNode root = document.DocumentElement;

            XmlNode node = root.SelectSingleNode("//envelope");


            Console.WriteLine("timestamp: {0}", node["timestamp"].InnerText);

            Console.WriteLine("transaction: {0}", node["transaction"].InnerText);

            Console.WriteLine("order_type: {0}", node["order_type"].InnerText);


            Console.ReadKey(true);

Das ist nur ein kurzer Test um zu schauen ob er die Werte richtig ausließt...

Ich bekomme aber sofort die Meldung

"der objektverweis wurde nicht auf eine objektinstanz festgelegt"

Ich würde mich über ne kleine Info wirklich freuen!

Doc

Geschrieben

Hallo DocSpencer!

Wenn du das direkt in eine Staging-Tabelle laden möchtest und Zugriff auf die SQL Server Integration Services hast, kann ich dir nur wärmstens den Data Flow Task ans Herz legen.

Da kannst du jedem Element bzw. dem Wert eine Spalte zuweisen und das SSIS-Paket mappt alles automatisch.

Haltepunkte, an welcher Stelle die Exception geworfen wird, hast du vermutlich schon gesetzt, oder?

Gruß, Goulasz

Geschrieben

Ich habe ganz vergessen die xml dazu zu packen...

Sorry dafür!

<?xml version="1.0" encoding="UTF-8"?>

<envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema_instance" xsi:noNamespaceSchemaLocation="actual_shipped.xsd">

  <actual_shipped order_id="12345678">

    <timestamp>2015_05_10T14:27:49</timestamp>

    <transaction>Shipment</transaction>

    <order_type>Neuversand mit Konfiguration</order_type>

    <terminal_id>1234567</terminal_id>

    <client>bla</client>

    <ship_to_address>

      <name>Max Mustermann</name>

      <contact>Max Mustermann</contact>

      <street>Musterstr. 5</street>

      <postal_code>12345</postal_code>

      <city>Musterstadt</city>

      <country>DE</country>

    </ship_to_address>

    <shipping_date>2015_05_10T14:27:49</shipping_date>

  </actual_shipped>

</envelope>

Geschrieben

Dein root node ist envelope. Du müsstest //actual_shipped auswählen.

Hier mal ne LINQ Variante. Der Vorteil hier ist, dass dir die IDE ein wenig bei der Formulierung der queries hilft.


using System;

using System.Linq;

using System.Xml.Linq;


namespace LoadXml

{

	class MainClass

	{

		static string testXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 

					"<envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema_instance\" xsi:noNamespaceSchemaLocation=\"actual_shipped.xsd\">" +

					"  <actual_shipped order_id=\"12345678\">" +

					"    <timestamp>2015_05_10T14:27:49</timestamp>" +

					"    <transaction>Shipment</transaction>" +

					"    <order_type>Neuversand mit Konfiguration</order_type>" +

					"    <terminal_id>1234567</terminal_id>" +

					"    <client>bla</client>" +

					"    <ship_to_address>" +

					"      <name>Max Mustermann</name>" +

					"      <contact>Max Mustermann</contact>" +

					"      <street>Musterstr. 5</street>" +

					"      <postal_code>12345</postal_code>" +

					"      <city>Musterstadt</city>" +

					"      <country>DE</country>" +

					"    </ship_to_address>" +

					"    <shipping_date>2015_05_10T14:27:49</shipping_date>" +

					"  </actual_shipped>" +

				"</envelope>";


		public static void Main (string[] args)

		{

			var d = XDocument.Parse (testXml);

			var result = from x in d.Descendants ("actual_shipped")

			select new 

				{ 

					TimeStamp = x.Element ("timestamp").Value,

					Transaction = x.Element ("transaction").Value,

					OrderType = x.Element ("order_type").Value

				};



			foreach (var r in result) {

				Console.WriteLine ("timestamp: {0}", r.TimeStamp);

				Console.WriteLine ("transaction: {0}", r.Transaction);

				Console.WriteLine ("order_type: {0}", r.OrderType);

			}

		}

	}

}

Man könnte sich auch so etwas vorstellen : C# Load XML using XLINQ (LINQ to XML)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...