Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

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.

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.