Hallo.
Es geht um folgendes Problem:
Ich soll eine Übungsaufgabe lösen, stehe aber gerade total auf dem Schlauch. Ich hoffe Ihr könnt mir helfen. Vielen Dank im voraus!
Im Anhang habe ich ein Bild hochgeladen, wie die Anwendung zum Schluss aussehen soll.
Die Aufgabenstellung lautet wie folgt:
Auf der obenstehenden Abbildung (das Bild im Anhang) werden Kurse und Teilnehmer mit ihrer Nr angezeigt. Der Benutzer kann nun Kurs und Teilnehmer gezielt anwählen.
• Überlegen Sie, in welcher Methode Sie die
Codeänderungen durchführen möchten.
• Stellen Sie fest, ob die Anzahl der
Attribute zu einem Knoten > 0 ist.
• In diesem Fall prüfen Sie, ob der Name des
ersten Attributs „Nr“ ist.
• In diesem Fall verwenden Sie die Eigenschaften
Name und Value des Attributs.
• Schreiben
Sie auch Zuweisungen für alle anderen Fälle.
Hier ist der Ursprüngliche Code:
Spoiler anzeigen
Veschoben. Code-Tag eingefügt. Sehr langen Code in Spoiler platziert. ~Thunderbolt
Es geht um folgendes Problem:
Ich soll eine Übungsaufgabe lösen, stehe aber gerade total auf dem Schlauch. Ich hoffe Ihr könnt mir helfen. Vielen Dank im voraus!
Im Anhang habe ich ein Bild hochgeladen, wie die Anwendung zum Schluss aussehen soll.
Die Aufgabenstellung lautet wie folgt:
Auf der obenstehenden Abbildung (das Bild im Anhang) werden Kurse und Teilnehmer mit ihrer Nr angezeigt. Der Benutzer kann nun Kurs und Teilnehmer gezielt anwählen.
• Überlegen Sie, in welcher Methode Sie die
Codeänderungen durchführen möchten.
• Stellen Sie fest, ob die Anzahl der
Attribute zu einem Knoten > 0 ist.
• In diesem Fall prüfen Sie, ob der Name des
ersten Attributs „Nr“ ist.
• In diesem Fall verwenden Sie die Eigenschaften
Name und Value des Attributs.
• Schreiben
Sie auch Zuweisungen für alle anderen Fälle.
Hier ist der Ursprüngliche Code:
VB.NET-Quellcode
- 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
- #End Region
- #Region "Darstellung"
- Dim tvwAusgewählt As String
- Dim tvwSchlüssel As Integer
- ''' <summary>
- ''' Füllt das TreeView mit den Knoten des XML-Documents
- ''' </summary>
- ''' <remarks>
- ''' Numeriert die Elemente über ihre Name-Eigenschaft.
- ''' Ruft zum weiteren Einlesen ebeneLesen auf
- ''' </remarks>
- 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
- ''' <summary>
- ''' Rekursives Einlesen von xmlNode zu TreeNode
- ''' </summary>
- ''' <param name="xmlKnoten">
- ''' Knoten des Xml-Dokuments
- ''' </param>
- ''' <param name="treeKnoten">
- ''' Enthält als Tag wahlweise die Eigenschaft
- ''' OuterXml, InnerXml, InnerText, Attributes oder
- ''' Name und Text des treeknoten.</param>
- ''' <remarks></remarks>
- Sub ebeneLesen(ByVal xmlKnoten As XmlNode, ByVal treeKnoten As TreeNode)
- tvwSchlüssel += 1
- treeKnoten.Text = xmlKnoten.Name
- 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 = "Nr:" & vbTab & vbTab & "Text" & vbCrLf _
- & treeKnoten.Name & vbTab & vbTab & treeKnoten.Text
- Case Else
- treeKnoten.Tag = "InnerText: " & vbCrLf & xmlKnoten.InnerText
- End Select
- 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
- End Sub
- ''' <summary>
- ''' Ausgabe in txtAusgabe, txtXpfad und txtSuchen
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- 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
- ''' <summary>
- ''' Lädt TreeView neu und navigiert zum ausgewählten Knoten
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- 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
- ''' <summary>
- ''' Navigiert zum TreeNode in txtSuchen
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- Private Sub btnSuchen_Click(ByVal sender As System.Object, _
- ByVal e As System.EventArgs) _
- Handles btnSuchen.Click
- tvwAusgewählt = txtSuchen.Text
- 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
- #End Region
- #Region "XPath"
- ''' <summary>
- ''' Stellt Xml-Knoten zum ausgewählten Pfad zusammen
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- 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 Region
- End Class
Veschoben. Code-Tag eingefügt. Sehr langen Code in Spoiler platziert. ~Thunderbolt
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()