Hallo,
ich habe hier eine Anwendung, die aus einem Xml-File eine Liste erzeugen soll. Die xml beinhaltet Produkte und einige Informationen zu diesen u.a. den Preis.
Dabei sei das Level auf dem die Produkte und Preise auftauchen beliebig, bis auf dass das Level der Preise ein Subnode der Produkte sein muss.
Die Anwendung definiert Klassen basierend auf dem Aufbau der Xml und deserialisiert die xml und ist damit nur soweit flexibel, wie alle Level ihre Hierarchie beibehalten.
Zum Beispiel gibt es da mehrere Subnodes Produkt im Node Produkte. Der Node Produkte enthält sonst nichts, kann man bspw. solche Hüllnodes irgendwie automatisch überspringen?
Spoiler anzeigen
Viele Grüße
ich habe hier eine Anwendung, die aus einem Xml-File eine Liste erzeugen soll. Die xml beinhaltet Produkte und einige Informationen zu diesen u.a. den Preis.
Dabei sei das Level auf dem die Produkte und Preise auftauchen beliebig, bis auf dass das Level der Preise ein Subnode der Produkte sein muss.
Die Anwendung definiert Klassen basierend auf dem Aufbau der Xml und deserialisiert die xml und ist damit nur soweit flexibel, wie alle Level ihre Hierarchie beibehalten.
Zum Beispiel gibt es da mehrere Subnodes Produkt im Node Produkte. Der Node Produkte enthält sonst nichts, kann man bspw. solche Hüllnodes irgendwie automatisch überspringen?
VB.NET-Quellcode
- Public Class Form1
- Private Sub pnDropXml_DragDrop(sender As Object, e As DragEventArgs) Handles pnDropXml.DragDrop
- Dim files = DirectCast(e.Data.GetData(DataFormats.FileDrop), String())
- If files(0).EndsWith(".xml") Then
- Using flStrm As New FileStream(files(0), FileMode.Open)
- ListPricesFrom(flStrm)
- End Using
- End If
- End Sub
- Private Sub pnDropXml_DragEnter(sender As Object, e As DragEventArgs) Handles pnDropXml.DragEnter
- If e.Data.GetDataPresent(DataFormats.FileDrop) Then
- e.Effect = DragDropEffects.Copy
- End If
- End Sub
- Private Sub ListPricesFrom(stream As Stream)
- rtbResult.ResetText()
- Dim serializer As New XmlSerializer(GetType(XMLBody))
- Dim X = DirectCast(serializer.Deserialize(stream), XMLBody)
- For Each prod In X.Angebot.Produkte
- rtbResult.AppendText($" {prod.Id}:{vbCrLf}{prod.Referenz.Preis}{vbCrLf}")
- Next
- End Sub
- End Class
- Public Class XMLBody
- Public Property Angebot As Angebot
- End Class
- Public Class Angebot
- Public Property Produkte As List(Of Produkt)
- End Class
- Public Class Produkt
- Public Property Id As String
- Public Property Referenz As Referenz
- End Class
- Public Class Referenz
- Public Property Preis As String
- End Class
Viele Grüße
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()