Benutzer mit den meisten Antworten
Mehrere Nodes in einer Datei für XMLSerialization

Frage
-
Ich möchte ein Programm erstellen, welches für mich Preise von Webseiten liest und in eine XML-Datei schreibt. Die URLs und alle anderen Daten für die XML-Datei stehen in einer weiteren XML-Datei. Zum Lesen der Datei habe ich nun einen XMLSerializer implementiert. Allerdings befinden sich in meiner URL-XML-Datei mehrere "Artikel".
Ist das Auslesen mehrerer Artikel aus einer datei möglich?
Code:
Public Class Form2 Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load XMLSerial.Main() End Sub End Class
Imports System.Xml.Serialization Imports System.IO <XmlRootAttribute("Artikel", Namespace:="http://www.benedata.netau.net", IsNullable:=False)> Public Class Artikel Public Name As String Public URL As String Public ToolTip As String Public TotalCost As String Public Amazon As Boolean Public Type As String End Class Public Class XMLSerial Public Shared Sub Main() Dim x As New XMLSerial() x.Read("art.xml") End Sub Protected Sub Read(filename As String) Dim serializer As New XmlSerializer(GetType(Artikel)) AddHandler serializer.UnknownNode, AddressOf serializer_UnknownNode AddHandler serializer.UnknownAttribute, AddressOf serializer_UnknownAttribute Dim fs As New FileStream(filename, FileMode.Open) Dim art As Artikel art = CType(serializer.Deserialize(fs), Artikel) Console.WriteLine((art.Name)) Console.WriteLine(art.URL) Console.WriteLine(art.ToolTip) Console.WriteLine(art.TotalCost) Console.WriteLine(art.Amazon) End Sub Private Sub serializer_UnknownNode(sender As Object, e As XmlNodeEventArgs) End Sub Private Sub serializer_UnknownAttribute(sender As Object, e As XmlAttributeEventArgs) End Sub End Class
XML:
<Artikelliste> <Artikel Typ="CPU"> <Name>Intel Core i5-4590</Name> <URL> http://www.notebooksbilliger.de/intel+core+i5+4590+4x+330ghz+boxed </URL> <ToolTip>3,3GHz, Quad-Core, 6MB Cache</ToolTip> </Artikel> <Artikel Typ="CPU"> <Name>Intel Core i5-4670</Name> <URL> http://www.notebooksbilliger.de/intel+core+i5+4670+4x+340ghz+boxed </URL> <ToolTip>3,4 GHz, Quad-Core, 6MB Cache</ToolTip> </Artikel> <Artikel Typ="CPU"> <Name>Intel Core i3-4160</Name> <URL> http://www.notebooksbilliger.de/intel+core+i3+4160+2x+360ghz+boxed </URL> <ToolTip>3,6GHz, Dual-Core, 3MB Cache</ToolTip> </Artikel> <Artikel Typ="Case"> <Name>Antec P280</Name> <URL> http://www.notebooksbilliger.de/antec+p280+gehaeuse+schwarz/eqsqid/95698e9a-1834-4f10-b000-5ef62e6a871e </URL> <ToolTip>USB 3.0, schallgedämmt</ToolTip> <img> http://www.notebooksbilliger.de/images/products/220000/226341/middleP280_black_1.jpg </img> </Artikel> <Artikel Typ="Case"> <Name>Antec Three Hundred Two</Name> <URL> http://www.notebooksbilliger.de/antec+three+hundred+two+gehaeuse+schwarz </URL> <ToolTip>USB3.0</ToolTip> <img> http://www.notebooksbilliger.de/images/products/220000/226722/middleThree_Hundred_Two_1.jpg </img> </Artikel> <Artikel Typ="Case"> <Name>Antec NSK4100</Name> <URL> http://www.notebooksbilliger.de/antec+new+solution+nsk4100+gehaeuse+schwarz </URL> <ToolTip>USB 3.0</ToolTip> <img> http://www.notebooksbilliger.de/images/products/220000/227736/middleNSK4100_1.jpg </img> </Artikel> <Artikel Typ="Disk"> <Name>Seagate SSHD 1TB</Name> <URL> http://www.notebooksbilliger.de/seagate+desktop+sshd+1tb+35+sata+6gbs </URL> <ToolTip>SATA 6Gb/s, 8GB SSD</ToolTip> </Artikel> <Artikel Typ="Disk"> <Name>Seagate SSHD 2TB</Name> <URL> http://www.notebooksbilliger.de/seagate+desktop+sshd+2tb+35+sata+6gbs </URL> <ToolTip>SATA 6Gb/s, 8GB SSD</ToolTip> </Artikel> <Artikel Typ="Disk"> <Name>Samsung SSD 250GB</Name> <URL> http://www.notebooksbilliger.de/samsung+850+evo+series+ssd+250gb </URL> <ToolTip>AES verschlüsselt</ToolTip> </Artikel> <Artikel Typ="Drive"> <Name>ASUS DRW-24F1ST</Name> <URL> http://www.notebooksbilliger.de/asus+drw+24f1st+schwarz </URL> <ToolTip>16x Lesegeschwindigkeit</ToolTip> </Artikel> <Artikel Typ="Drive"> <Name>LG BH16NS40 Blu-Ray Brenner</Name> <URL> http://www.notebooksbilliger.de/lg+bh16ns40+schwarz+187280 </URL> <ToolTip>16x Lesegeschwindigkeit</ToolTip> </Artikel> <Artikel Typ="Drive"> <Name>LiteOn iHAS124-14 DVD-Brenner</Name> <URL> http://www.notebooksbilliger.de/liteon+ihas124+14+schwarz </URL> <ToolTip>12x Lesegeschwindigkeit</ToolTip> </Artikel> <Artikel Typ="GPU"> <Name>EVGA NVidia GeForce GTX 750</Name> <URL> http://www.notebooksbilliger.de/evga+nvidia+geforce+gtx+750 </URL> <ToolTip>1GB GDDR5</ToolTip> </Artikel> <Artikel Typ="GPU"> <Name>EVGA NVidia GeForce GTX 960</Name> <URL> http://www.notebooksbilliger.de/evga+geforce+gtx+960+superclocked/eqsqid/b4a3d9ea-4e9e-4ca7-a97e-9a5a330faf80 </URL> <ToolTip>2GB GDDR5</ToolTip> </Artikel> <Artikel Typ="GPU"> <Name>OnBoard Grafik</Name> <URL/> <ToolTip>Leistung Mainboard-abhängig</ToolTip> </Artikel> <Artikel Typ="Main"> <Name>ASUS Z97-Pro WLAN</Name> <URL> http://www.notebooksbilliger.de/asus+z97+pro+wi+fi+ac+intel+sockel+1150 </URL> <ToolTip>Intel Z97 Chipset</ToolTip> </Artikel> <Artikel Typ="Main"> <Name>ASUS Z97-A</Name> <URL> http://www.notebooksbilliger.de/asus+z97+ausb+31+intel+sockel+1150 </URL> <ToolTip>Intel Z97 Chipset, USB 3.1</ToolTip> </Artikel> <Artikel Typ="Main"> <Name>ASUS Z87-Deluxe Quad</Name> <URL typ="Amazon"> http://www.amazon.de/Z87-Deluxe-Mainboard-Sockel-Intel-Speicher/dp/B00F9RKVSK/keywords=ASUS+Z87-Deluxe+quad </URL> <ToolTip>Intel Z87 Chipset, WLAN, NFC</ToolTip> </Artikel> <Artikel Typ="Power"> <Name>be quiet! 80PLUS Bronze</Name> <URL> http://www.notebooksbilliger.de/be+quiet+system+power+7+bulk+netzteil+400w/eqsqid/2a994f2c-0f33-4985-9b10-771471f789c1 </URL> <ToolTip>400W</ToolTip> </Artikel> <Artikel Typ="Power"> <Name>Thermaltake Hamburg</Name> <URL> http://www.notebooksbilliger.de/thermaltake+hamburg+530w+80+plus+pc+netzteil </URL> <ToolTip>530W</ToolTip> </Artikel> <Artikel Typ="RAM"> <Name>Crucial Ballistix 2GB</Name> <URL> http://www.notebooksbilliger.de/2gb+crucial+ballistix+sport+ddr3+ram+1600+mhz </URL> <ToolTip>DDR3-RAM, 1600MHz</ToolTip> </Artikel> <Artikel Typ="RAM"> <Name>Kingston HyperX 4GB</Name> <URL> http://www.notebooksbilliger.de/4gb+kingston+hyperx+fury+cl10+ddr3+1600+rot/eqsqid/66412903-c18e-4261-9378-9cee560f8225 </URL> <ToolTip>DDR3-RAM, 1600MHz</ToolTip> </Artikel> <Artikel Typ="RAM"> <Name>Corsair ValueSelect 8GB</Name> <URL> http://www.notebooksbilliger.de/8gb+corsair+valueselect+kit+cl9+ddr3+1333/eqsqid/238c01be-f549-4371-a8a2-c1f058a5ea67 </URL> <ToolTip>DDR3-Ram, 1333MHz</ToolTip> </Artikel> <Artikel Typ="RAM"> <Name>Crucial Ballistix 16GB</Name> <URL> http://www.notebooksbilliger.de/16gb+2x+8gb+crucial+ballistix+sport+ddr3+ram+1600+mhz </URL> <ToolTip>DDR3-RAM, 1600MHz</ToolTip> </Artikel> </Artikelliste>
BLDL
Antworten
-
Hallo,
das Auslesen von mehreren Knoten ist natürlich möglich, sonst wäre das Konzept dahinter etwas sehr sinnlos. Dafür brauchst du zunächst eine Klasse Artikelliste in die du (de)serialisieren willst. Dann fügst du dort eine Eigenschaft ein die die Liste repräsentiert:
<XmlRootAttribute("Artikelliste", Namespace:="http://www.benedata.netau.net", IsNullable:=False)> Public Class Artikelliste <XmlElement("Artikel")> Public Property Items As List(Of Artikel) End Class Public Class Artikel Public Property Name As String End Class
Über das XmlElement-Attribut wird hier dafür gesorgt das kein extra Knoten für die Unter-Liste entsteht sondern die Elemente sofort in dem Artikelliste Knoten landen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert BLDL Montag, 5. Oktober 2015 20:14
- Tag als Antwort aufgehoben BLDL Freitag, 9. Oktober 2015 20:28
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Freitag, 9. Oktober 2015 20:33
- Als Antwort markiert BLDL Samstag, 10. Oktober 2015 08:39