vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
treeview xml lesen mit bestimmten Attribut 
Autor: theGodfather
Datum: 03.03.19 18:23

Hallo zusammen,

ich habe folgendes Problem.

ich habe ein Treeview und kann dort eine XML-Datei laden. Soweit so gut.

Ich will die Anzeige allerdings so, dass ich das Attribut Nr zb 203 oder 303 davor mit dem Namen Nr. angezeigt bekomme.

Also ein Knotenpunkt der wie folgt aussieht:Nr 203 (statt nur 203)
Irgendwie schaffe ich es nicht. Kann mir einer helfen:

Anbei sowohl der VB-Code den ich soweit fertig habe, bis auf die Anzeige Nr. vor den Werten.

Und die XML-Datei.

Code Part1
Imports System.Xml
Public Class Form1
 
    Dim xmlDok As New XmlDocument
 
#Region "Laden"
    Dim DateiLang As String
    Private Sub btnLaden_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) _
                                Handles btnLaden.Click
 
        If dlgXmlÖffnen.ShowDialog = Windows.Forms.DialogResult.OK Then
            DateiLang = dlgXmlÖffnen.FileName
        Else
            Exit Sub
        End If
        xmlDokLaden()
    End Sub
 
    Private Sub Form1_DragEnter(ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.DragEventArgs) _
                Handles MyBase.DragEnter
 
        Dim Dateien() As String = CType(e.Data.GetData(DataFormats.FileDrop), _
          String())
        If Dateien.GetUpperBound(0) = 0 Then
            DateiLang = Dateien(0).ToString
        End If
        xmlDokLaden()
    End Sub
 
Sub xmlDokLaden()
        xmlDok.RemoveAll()
        Try
            xmlDok.Load(DateiLang)
        Catch ausnahmeKeinXml As XmlException
            MessageBox.Show("XmlException:" & vbCrLf & vbCrLf & "Keine" & _
              "Xml-Daten")
        Catch ausnahme As Exception
            MessageBox.Show("Anderer Fehler beim Laden von Xml-Dokument:" _
                            & vbCrLf & vbCrLf & ausnahme.Message)
        End Try
        Text = "KnotenInfo " & My.Computer.FileSystem.GetName(DateiLang)
        tvwFüllen()
        tvw.Select()
    End Sub
 
    Private Sub Form1_Load(ByVal sender As Object, _
                    ByVal e As System.EventArgs) _
                    Handles Me.Load
        xmlDok.PreserveWhitespace = True
    End Sub
 
    Private Sub chkPreserveWhiteSpace_Click(ByVal sender As Object, _
                                    ByVal e As System.EventArgs) _
                                    Handles chkPreserveWhiteSpace.Click
        tvwAusgewählt = txtSuchen.Text
        xmlDok.PreserveWhitespace = chkPreserveWhiteSpace.Checked
 
        xmlDokLaden()
        Try
            tvw.SelectedNode = tvw.Nodes.Find(tvwAusgewählt, True)(0)
        Catch ex As Exception
            MessageBox.Show("Tree-Knoten nicht gefunden!")
        End Try
        tvw.Select()
    End Sub
#Region "Darstellung"
    Dim tvwAusgewählt As String
    Dim tvwSchlüssel As Integer
 
 
 
    Sub tvwFüllen()
        txtAusgabe.Text = ""
        tvw.BeginUpdate()
        tvw.Nodes.Clear()
 
        Dim xKnotenListe As XmlNodeList = xmlDok.SelectNodes("*")
        Dim tKnoten As TreeNode = tvw.Nodes.Add("")
 
        tvwSchlüssel = 0
        tKnoten.Name = tvwSchlüssel.ToString("00")
        For Each xn As XmlNode In xKnotenListe
            ebeneLesen(xn, tKnoten)
        Next
 
        tvw.EndUpdate()
        tvw.Select()
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: treeview xml lesen mit bestimmten Attribut 
Autor: theGodfather
Datum: 03.03.19 18:24

Code Part2:



Sub ebeneLesen(ByVal xmlKnoten As XmlNode, ByVal treeKnoten As TreeNode)
 
        tvwSchlüssel += 1
        treeKnoten.Text = xmlKnoten.Name
 
        If xmlKnoten.Attributes.Count > 0 AndAlso xmlKnoten.Attributes("Nr") _
          IsNot Nothing Then
            treeKnoten.Text = xmlKnoten.Attributes("Nr").Value
        Else
            If xmlKnoten.Name = "Name" Or xmlKnoten.Name = "Punkte" Or
             xmlKnoten.Name = "Bezeichnung" Then
                treeKnoten.Text = xmlKnoten.InnerText
            Else
                treeKnoten.Text = xmlKnoten.Name
            End If
        End If
 
 
 Dim tn As TreeNode
        Dim xn As XmlNode
        For Each xn In xmlKnoten.ChildNodes
            If xn.HasChildNodes Then
                tn = treeKnoten.Nodes.Add(tvwSchlüssel.ToString("00"), xn.Name)
                ebeneLesen(xn, tn)
            End If
        Next
 
 
 
        Select Case True
            Case rbOuterXml.Checked
                treeKnoten.Tag = "OuterXml:" & vbCrLf & xmlKnoten.OuterXml
            Case rbInnerXml.Checked
                treeKnoten.Tag = "InnerXml: " & vbCrLf & xmlKnoten.InnerXml
            Case rbInnerText.Checked
                treeKnoten.Tag = "InnerText: " & vbCrLf & xmlKnoten.InnerText
            Case rbAttributes.Checked
                treeKnoten.Tag = "Attribute: " & vbCrLf
                treeKnoten.Tag &= "Name" & vbTab & vbTab & "InnerText" & vbCrLf
                For Each xmlAtt As XmlAttribute In xmlKnoten.Attributes
                    Dim s As String = xmlAtt.Name & vbTab
                    If s.Length < Strings.Len("Name" & vbTab & vbTab) Then
                        s &= vbTab
                    End If
                    treeKnoten.Tag &= s & xmlAtt.InnerText & vbCrLf
                Next
            Case rbTreeView.Checked
                treeKnoten.Tag = "Name:" & vbTab & vbTab & "Text" & vbCrLf _
                                & treeKnoten.Name & vbTab & vbTab & _
                                treeKnoten.Text
            Case Else
                treeKnoten.Tag = "InnerText: " & vbCrLf & xmlKnoten.InnerText
        End Select
 
 
 
    End Sub
 
 
 
    Private Sub tvw_AfterSelect(ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.TreeViewEventArgs) _
                Handles tvw.AfterSelect
 
        txtAusgabe.Text = e.Node.Tag
 
        tvwAusgewählt = txtSuchen.Text
        txtSuchen.Text = e.Node.Name
 
        txtXmlPfad.Text = Replace(e.Node.FullPath, "\", "/")
    End Sub
 
 
 
    Private Sub Darstellung(ByVal sender As Object, _
                            ByVal e As System.EventArgs) _
                            Handles rbTreeView.Click, _
                                    rbOuterXml.Click, _
                                    rbInnerXml.Click, _
                                    rbInnerText.Click, _
                                    rbAttributes.Click
 
        txtAusgabe.Clear()
        tvwFüllen()
 
        If tvwAusgewählt = "" Then
            If txtSuchen.Text <> "" Then
                tvwAusgewählt = txtSuchen.Text
            Else
                tvwAusgewählt = tvw.Nodes(0).Name
            End If
        End If
 
        Try
            tvw.SelectedNode = tvw.Nodes.Find(tvwAusgewählt, True)(0)
        Catch ex As Exception
            MessageBox.Show("Tree-Knoten nicht gefunden!")
        End Try
 
    End Sub


Beitrag wurde zuletzt am 03.03.19 um 18:25:30 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: treeview xml lesen mit bestimmten Attribut 
Autor: theGodfather
Datum: 03.03.19 18:26

Code Part3:
    Private Sub btnXPath_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) _
                                Handles btnXPath.Click, _
                                txtXmlPfad.Validated
 
        Dim xmlPfad As String = txtXmlPfad.Text
        Dim sAus As String = ""
 
        If xmlPfad <> "" Then
            Try
                Dim knoten As XmlNodeList = xmlDok.SelectNodes(xmlPfad)
                sAus = "Anzahl knoten: " & knoten.Count & vbCrLf
 
                For Each k As XmlNode In knoten
                    Dim cUnterknoten As Integer = 0
                    For i = 0 To k.ChildNodes.Count - 1
                        Console.WriteLine(i)
                        Console.WriteLine(k.ChildNodes(i).Name)
                        If k.ChildNodes(i).Name <> "#whitespace" Then
                            cUnterknoten += 1
                        End If
                    Next i
                    sAus &= "Name: " & k.Name & " Echte Unterknoten: " _
                            & cUnterknoten & vbCrLf
                    For Each uk As XmlNode In k.ChildNodes
                        If uk.HasChildNodes Then
                            sAus &= "Name: " & uk.Name & vbTab _
                            & "InnerText: " & uk.InnerText & vbCrLf
                        End If
                    Next
                Next
 
            Catch ausnahme As Exception
                MessageBox.Show("Fehler beim Einlesen" & vbCrLf & vbCrLf _
                                & ausnahme.Message)
            End Try
        End If
        txtAusgabe.Text = sAus
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: treeview xml lesen mit bestimmten Attribut 
Autor: theGodfather
Datum: 03.03.19 18:27

XML-DATEI:

<?xml version="1.0" encoding="utf-8"?>
<Kurse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Kurs Nr="101">
  <Bezeichnung>Word Grundlagen</Bezeichnung>
  <Teilnehmerliste>
    <Teilnehmer Nr="1001">    
      <Name>Maximilian</Name>
      <Punkte>90</Punkte>
    </Teilnehmer>
    <Teilnehmer Nr="1002">     
      <Name>Nora</Name>
      <Punkte>99</Punkte>
    </Teilnehmer>
    <Teilnehmer Nr="1003">
      <Name>Oskar</Name>
      <Punkte>80</Punkte>
    </Teilnehmer>
  </Teilnehmerliste>
</Kurs>
 <Kurs Nr="203">
  <Bezeichnung>Excel VBA Programmierung</Bezeichnung>
<Teilnehmerliste>
    <Teilnehmer Nr="1001">    
      <Name>Maximilian</Name>
      <Punkte>92</Punkte>
    </Teilnehmer>
    <Teilnehmer Nr="1005">     
      <Name>Sarah</Name>
      <Punkte>89</Punkte>
    </Teilnehmer>
    <Teilnehmer Nr="1010">
      <Name>Heike</Name>
      <Punkte>96</Punkte>
    </Teilnehmer>
  </Teilnehmerliste>
</Kurs>
 <Kurs Nr="303">
  <Bezeichnung>Access VBA</Bezeichnung>
  <Teilnehmerliste>
    <Teilnehmer Nr="1004">    
      <Name>August</Name>
      <Punkte>95</Punkte>
    </Teilnehmer>
    <Teilnehmer Nr="1006">     
      <Name>Vicki</Name>
      <Punkte>99</Punkte>
    </Teilnehmer>
    <Teilnehmer Nr="1007">
      <Name>Andrea</Name>
      <Punkte>98</Punkte>
    </Teilnehmer>
  </Teilnehmerliste>
</Kurs>
</Kurse>
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: treeview xml lesen mit bestimmten Attribut 
Autor: HenryV
Datum: 04.03.19 10:32

Beim setzen des treeKnoten.Text den String "Nr. " mitgeben
treeKnoten.Text = "Nr. " & xmlKnoten.Attributes("Nr").Value
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: treeview xml lesen mit bestimmten Attribut 
Autor: theGodfather
Datum: 04.03.19 17:48

Super HenryV du bist meine Rettung. Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel