none
Eigene XML Werte auslesen und in ListView wiedergeben RRS feed

  • 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 unter
    My.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?

    Freitag, 24. Juli 2009 14:36

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
    Donnerstag, 24. Dezember 2009 05: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

    • Als Antwort markiert Pi Jay Sonntag, 26. Juli 2009 14:46
    • Tag als Antwort aufgehoben Pi Jay Dienstag, 22. Dezember 2009 15:04
    Sonntag, 26. Juli 2009 14:34
  • Seh gut! Wow. Vielen, vielen Dank für Deine Hilfe ;)
    Sonntag, 26. Juli 2009 14:47
  • 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 ;)
    Samstag, 19. Dezember 2009 17:16
  • 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
    Donnerstag, 24. Dezember 2009 05:51