Benutzer mit den meisten Antworten
Eigene XML Werte auslesen und in ListView wiedergeben

Frage
-
Hi Community,
Ich hab schon im MSDN (hier^^) nachgeguckt, ist auch ein sehr ausführlich beschriebenes Tut
um XML Dateien auszulesen, ich komme allerdings damit nicht zurecht. Die Beschreibungen / Hilfen
sind zwar sehr gut formuliert, aber ich weiß nicht wie ich der Sache begegnen soll.
Nun erstmal das Problem ;)
Ich hab eine XML Datei geschrieben, die mit Start des Programmes automatisch neu runtergeladen wird.
Die Datei wird unterMy.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\ComMa-Team\setinfo\proxml.xml
angelegt und beinhaltet z.B. folgenden "XML-Code":
<ComputerManager-Team-Setup-File>
<CMTSFVersion>000.000.000.000</CMTSFVersion>
<NeuesProgramm>
<Version>V.1.1.1.1</Version>
<Bereich>Home</Bereich>
<Name>XPPresentation</Name>
<Beschreibung>Hier kommt die Beschreibung</Beschreibung>
<Groesse>3,75 MB</Groesse>
<MainFile>http://www.hierstehtmeineadresse.de/downloads/programme/XPPresentation</MainFile>
<LokZielPfad>SpecialFiles.ProgramFiles:\ComMa-Team\XPPresentation</LokZielPfad>
</NeuesProgramm>
</ComputerManager-Team-Setup-File>
Nun sollen die Werte zu Version, Name und Größe als 1 Item (mit 2 Subitems) gespeichert werden (die Reihenfolge besteht bereits)
Nun muss nur noch beachtet werden, dass es mehrere neue Programme geben kann.
Könnt ihr mir helfen?
Antworten
-
Hier mal eine Demo mit einem TreeView und Auslesen der Attribute, das alles mit XElement:
Public Class Form1 Dim xe0 As XElement = <DDPL> <MetaCodes> <Title>Komplett neue Seite</Title> <Ressource FileName="Neue Seite" Directory=".\ProjectFiles\" Type="HTML"/> <Ressource FileName="Neues StyleSheet" Directory=".\ProjectFile\CSS" Type="CSS"/> <Ressource FileName="Neues StyleSheet(2)" Directory=".\ProjectFile\CSS" Type="CSS"/> </MetaCodes> </DDPL> Private sc As New SplitContainer With {.Dock = DockStyle.Fill, _ .SplitterDistance = 100} Private tv As New TreeView With {.Dock = DockStyle.Fill} Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.Width = 600 ' Formulargröße erhöhen, um alles anzuzeigen Me.Controls.AddRange(New Control() {sc}) ' SplitContainer im Formular platzieren sc.Panel1.Controls.Add(tv) ' im linken Teil des Splitcontainers das Grid füllend platzieren LoadTreeview() tv.ExpandAll() End Sub Private Sub LoadTreeview() For Each n1 In From e1 In xe0.Elements("MetaCodes") Dim tn1 = tv.Nodes.Add(n1.Element("Title").Value) For Each n2 In From e2 In n1.Elements("Ressource") tn1.Nodes.Add(String.Format("FileName: {0}, Directory: {1}, Type: {2}", _ n2.Attribute("FileName").Value, _ n2.Attribute("Directory").Value, _ n2.Attribute("Type").Value)) Next Next End Sub End Class
--
Peter- Als Antwort vorgeschlagen Peter Fleischer Donnerstag, 24. Dezember 2009 19:08
- Als Antwort markiert Robert Breitenhofer Freitag, 25. Dezember 2009 20:51
Alle Antworten
-
Hallo Pi Jay,
Der folgende Code Schnipsel liest eigene XML Werte und wiedergibt sie in einer ListView:
Dim doc As New XmlDocument doc.Load("C:\Robert\Program.xml") '//Pfad der XML Datei Dim nodes As XmlNodeList = doc.SelectNodes("ComputerManager-Team-Setup-File/NeuesProgramm") listviewObjects.View = View.Details listviewObjects.FullRowSelect = True listviewObjects.GridLines = True '//Spalten für Items und SubItems listviewObjects.Columns.Add("Version") listviewObjects.Columns.Add("Name") listviewObjects.Columns.Add("Groesse") For Each node As XmlNode In nodes Dim Version As String = node.SelectSingleNode("Version").InnerText Dim Name As String = node.SelectSingleNode("Name").InnerText Dim Groesse As String = node.SelectSingleNode("Groesse").InnerText Dim myitem As New ListViewItem(Version, 0) myitem.SubItems.Add(Name) myitem.SubItems.Add(Groesse) listviewObjects.Items.AddRange(New ListViewItem() {myitem}) Next listviewObjects.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)
Oben hinzufügen:Imports System.Xml
Als Beispiel habe ich Deine XML verwendet und noch ein Neues Programm hinzugefügt.
<ComputerManager-Team-Setup-File> <CMTSFVersion>000.000.000.000</CMTSFVersion> <NeuesProgramm> <Version>V.1.1.1.1</Version> <Bereich>Home</Bereich> <Name>XPPresentation</Name> <Beschreibung>Hier kommt die Beschreibung</Beschreibung> <Groesse>3,75 MB</Groesse> <MainFile>http://www.hierstehtmeineadresse.de/downloads/programme/XPPresentation</MainFile> <LokZielPfad>SpecialFiles.ProgramFiles:\ComMa-Team\XPPresentation</LokZielPfad> </NeuesProgramm> <NeuesProgramm> <Version>V.2.2.2.2</Version> <Bereich>Home</Bereich> <Name>XPPresentation2</Name> <Beschreibung>Hier kommt die Beschreibung</Beschreibung> <Groesse>3,85 MB</Groesse> <MainFile>http://www.hierstehtmeineadresse.de/downloads/programme/XPPresentation</MainFile> <LokZielPfad>SpecialFiles.ProgramFiles:\ComMa-Team\XPPresentation</LokZielPfad> </NeuesProgramm> </ComputerManager-Team-Setup-File>
Hier noch ein Artikel über Speichern in XML Dateien und in einer ListView auslesen:http://www.knowdotnet.com/articles/serializationoflistviewtoxml.html
Grüße,
Robert
-
Inwiefern funktioniert das mit Attributen?
Ich habe eine neue XML-Datei erstellt, wo nicht nur die Knoten, sondern auch die Attribute ausgelesen werden sollen.
Allerdings weiß ich nicht wie das funktioniert. Habe bereits gesucht und ausprobiert, was ich gefunden habe, hat aber nicht
funktioniert.
Kann mir jmd. helfen?
Hier die XML-Datei:
<DDPL> <MetaCodes> <Title>Komplett neue Seite</Title> <Ressource FileName="Neue Seite" Directory=".\ProjectFiles\" Type="HTML" /> <Ressource FileName="Neues StyleSheet" Directory=".\ProjectFile\CSS" Type="CSS" /> <Ressource FileName="Neues StyleSheet(2)" Directory=".\ProjectFile\CSS" Type="CSS" /> </MetaCodes> </DDPL>
Hierbei soll der Titel (<Title>), der Name der neuen Ressource (<Ressource FileName="" />), sowie der Ort der Ressource (Directory="")
ausgegeben werden.
Anmerkung:
A) Der Titel ist einmalig, muss nur einmal ausgelesen werden.
B) Ressourcen können soviele hinzugefügt werden, wie nötig.
C) Der Dateiname und der Pfad sollen in einer TreeView ausgegeben werden, je nach Ordnerstand.
Tut mir Leid, wenn das gleich soviel ist, ich würde mich trotzdem auf Hilfe sehr freuen ;) -
Hier mal eine Demo mit einem TreeView und Auslesen der Attribute, das alles mit XElement:
Public Class Form1 Dim xe0 As XElement = <DDPL> <MetaCodes> <Title>Komplett neue Seite</Title> <Ressource FileName="Neue Seite" Directory=".\ProjectFiles\" Type="HTML"/> <Ressource FileName="Neues StyleSheet" Directory=".\ProjectFile\CSS" Type="CSS"/> <Ressource FileName="Neues StyleSheet(2)" Directory=".\ProjectFile\CSS" Type="CSS"/> </MetaCodes> </DDPL> Private sc As New SplitContainer With {.Dock = DockStyle.Fill, _ .SplitterDistance = 100} Private tv As New TreeView With {.Dock = DockStyle.Fill} Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.Width = 600 ' Formulargröße erhöhen, um alles anzuzeigen Me.Controls.AddRange(New Control() {sc}) ' SplitContainer im Formular platzieren sc.Panel1.Controls.Add(tv) ' im linken Teil des Splitcontainers das Grid füllend platzieren LoadTreeview() tv.ExpandAll() End Sub Private Sub LoadTreeview() For Each n1 In From e1 In xe0.Elements("MetaCodes") Dim tn1 = tv.Nodes.Add(n1.Element("Title").Value) For Each n2 In From e2 In n1.Elements("Ressource") tn1.Nodes.Add(String.Format("FileName: {0}, Directory: {1}, Type: {2}", _ n2.Attribute("FileName").Value, _ n2.Attribute("Directory").Value, _ n2.Attribute("Type").Value)) Next Next End Sub End Class
--
Peter- Als Antwort vorgeschlagen Peter Fleischer Donnerstag, 24. Dezember 2009 19:08
- Als Antwort markiert Robert Breitenhofer Freitag, 25. Dezember 2009 20:51