Zum Inhalt springen

XML Dateien (DB-Tabellen mit OuterJoin) auslesen und Auswerten


Fiaechen2011

Empfohlene Beiträge

Als C# Anfänger habe ich im Praktikum ein Problem mit einer mir gestellten Aufgabe und hoffe, das mir hier jemand einen Schubs in die richtige Richtung geben kann.

Wir verwenden Visual C# 2010.

Ich habe eine XML Datei in der die Beschreibung für 2 durch einen Outerjoin verbundene Tabellen stehen.

---

<dmd:model xmlns:dmd="urn:CS.SY_DMD" dominant="RWKonto" >

<dmd:table name="RWKonto" primary="rwkto_id">

<dmd:column name="rwkto_id" alias="Id" type="serial" size="4" nullable="false" />

...

</dmd:column>

<dmd:join source="rwkto_id" target="rwkto_id" detail="RWEAFremdKonto" lookup="true" outer="true" targetCardinality="0..n"/>

</dmd:table>

<dmd:table name="RWEAFremdKonto" primary="rweak_id">

<dmd:column name="rweak_id" alias="FremdKontoId" type="serial" size="4" nullable="false" />

…

</dmd:table>

</dmd:model>

---

Nun sollen alle nicht nullbaren durch den Outer Join verbundenen Spalten einen Fehler liefern.

Als Lösungsansatz habe ich mir folgendes überlegt:

Den Namen von Source und Target aus der Join Zeile auslesen

Attribut vom Source einlesen

Attribut vom Target einlesen

Prüfen Source Attrib.(nullabe = false) = Target Attrib. (nullable = false) = Fehler !!!

Nun meine Fragen:

Ist dieser Lösungsansatz so umsetzbar und wenn dem so ist, wie kann ich auf die Join Zeile und die Abschnitte der einzelnen Tabellen zugreifen?

Gibt es in der Systems.XML einen Befehl dafür, oder muss ich die komplette XML Datei als Text einlesen und die entsprechenden Stellen suchen lassen ?

Ich würde mich über jede Hilfestellung sehr freuen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein normaler Ansatz wäre, das ganze in ein XDocument zu packen und dann mit Linq to Xml Queries darauf auszuführen.

LINQ to XML

LINQ to XML - 5 Minute Overview - Hooked on LINQ

Ein weiterer Ansatz wäre, sich per xsd.exe aus der xml-Struktur eine Klasse generieren zu lassen.

Generate C# class from XSD file.

Ich präferiere ersteres, weil es flexibler ist und meines erachtens nicht soviel overhead mitbringt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich kann NerdonRails nur zustimmen mit linq ist das echt gut zu lösen...

hmm zu deiner frage umsetzbar ist fast alles in der informatik nur sinnvoll und obs funktioniert is ne andre frage...

Bevor du suchen kannst musst du das XML-Dokument laden.. dies kann so aussehn

  

        public static XDocument loadXDocument(String path)

        {

            var fs = File.OpenRead(path);

            var reader = new XmlTextReader(fs) 

            { WhitespaceHandling = WhitespaceHandling.Significant };

            return XDocument.Load(reader);

        }

fs ist ein FileStream die Zeile kannst du dir ganz sparen falls du der Methode einen Stream übergeben würdest (FileStream, MemoryStream etc..) reader is wie der Name schon sagt ein Reader... WhitespaceHandling sagt wie er die Leerzeichen behandeln soll XDocument.Load() ladet die XML
var hauptknoten = XCokumentobjekt.Elements();
das liefert alle knoten auf der ersten ebene
var knoten = XDocumentobjekt.Elements("Name"); 
liefert ein bestimmen knoten auch nur auf erster ebene ne rekusive suche falls du nicht weis an welcher stelle sich der Knoten befindet oder du machst es mit XDocument.Elements("XX").Elements("yy").Elements() wenn du genau weist auf welcher ebene der Knoten sich befindet doch selbst dann wär ne rekusive suche schöner und ausbaufähiger fur die Zukunft... es gibt aber noch .Element()/.Element("Name") dies liefert jedoch nur einen Knoten und nicht mehrere bsp <Blubb ID="20">

var x = XDocumentobjekt.Attributes() (das gleiche wie bei Element)

for each(item in x )

{

    var value = item.Value; 

}

in item steht ID und in Item.Value steht dann 20 drin ...

Doch vorsicht mit Linq es kann in bestimmten bereichen langsamer werden alls mehrere forschleifen in folge und eine tücke von linq ist noch deferred execution...

Bearbeitet von 2K1.INC
Link zu diesem Kommentar
Auf anderen Seiten teilen

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...