Brauche Hilfe bei der Lösung

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Brauche Hilfe bei der Lösung

    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

    VB.NET-Quellcode

    1. Imports System.Xml
    2. Public Class Form1
    3. Dim xmlDok As New XmlDocument
    4. #Region "Laden"
    5. Dim DateiLang As String
    6. Private Sub btnLaden_Click(ByVal sender As System.Object, _
    7. ByVal e As System.EventArgs) _
    8. Handles btnLaden.Click
    9. If dlgXmlÖffnen.ShowDialog = Windows.Forms.DialogResult.OK Then
    10. DateiLang = dlgXmlÖffnen.FileName
    11. Else
    12. Exit Sub
    13. End If
    14. xmlDokLaden()
    15. End Sub
    16. Private Sub Form1_DragEnter(ByVal sender As System.Object, _
    17. ByVal e As System.Windows.Forms.DragEventArgs) _
    18. Handles MyBase.DragEnter
    19. Dim Dateien() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
    20. If Dateien.GetUpperBound(0) = 0 Then
    21. DateiLang = Dateien(0).ToString
    22. End If
    23. xmlDokLaden()
    24. End Sub
    25. Sub xmlDokLaden()
    26. xmlDok.RemoveAll()
    27. Try
    28. xmlDok.Load(DateiLang)
    29. Catch ausnahmeKeinXml As XmlException
    30. MessageBox.Show("XmlException:" & vbCrLf & vbCrLf & "Keine Xml-Daten")
    31. Catch ausnahme As Exception
    32. MessageBox.Show("Anderer Fehler beim Laden von Xml-Dokument:" _
    33. & vbCrLf & vbCrLf & ausnahme.Message)
    34. End Try
    35. Text = "KnotenInfo " & My.Computer.FileSystem.GetName(DateiLang)
    36. tvwFüllen()
    37. tvw.Select()
    38. End Sub
    39. Private Sub Form1_Load(ByVal sender As Object, _
    40. ByVal e As System.EventArgs) _
    41. Handles Me.Load
    42. xmlDok.PreserveWhitespace = True
    43. End Sub
    44. Private Sub chkPreserveWhiteSpace_Click(ByVal sender As Object, _
    45. ByVal e As System.EventArgs) _
    46. Handles chkPreserveWhiteSpace.Click
    47. tvwAusgewählt = txtSuchen.Text
    48. xmlDok.PreserveWhitespace = chkPreserveWhiteSpace.Checked
    49. xmlDokLaden()
    50. Try
    51. tvw.SelectedNode = tvw.Nodes.Find(tvwAusgewählt, True)(0)
    52. Catch ex As Exception
    53. MessageBox.Show("Tree-Knoten nicht gefunden!")
    54. End Try
    55. tvw.Select()
    56. End Sub
    57. #End Region
    58. #Region "Darstellung"
    59. Dim tvwAusgewählt As String
    60. Dim tvwSchlüssel As Integer
    61. ''' <summary>
    62. ''' Füllt das TreeView mit den Knoten des XML-Documents
    63. ''' </summary>
    64. ''' <remarks>
    65. ''' Numeriert die Elemente über ihre Name-Eigenschaft.
    66. ''' Ruft zum weiteren Einlesen ebeneLesen auf
    67. ''' </remarks>
    68. Sub tvwFüllen()
    69. txtAusgabe.Text = ""
    70. tvw.BeginUpdate()
    71. tvw.Nodes.Clear()
    72. Dim xKnotenListe As XmlNodeList = xmlDok.SelectNodes("*")
    73. Dim tKnoten As TreeNode = tvw.Nodes.Add("")
    74. tvwSchlüssel = 0
    75. tKnoten.Name = tvwSchlüssel.ToString("00")
    76. For Each xn As XmlNode In xKnotenListe
    77. ebeneLesen(xn, tKnoten)
    78. Next
    79. tvw.EndUpdate()
    80. tvw.Select()
    81. End Sub
    82. ''' <summary>
    83. ''' Rekursives Einlesen von xmlNode zu TreeNode
    84. ''' </summary>
    85. ''' <param name="xmlKnoten">
    86. ''' Knoten des Xml-Dokuments
    87. ''' </param>
    88. ''' <param name="treeKnoten">
    89. ''' Enthält als Tag wahlweise die Eigenschaft
    90. ''' OuterXml, InnerXml, InnerText, Attributes oder
    91. ''' Name und Text des treeknoten.</param>
    92. ''' <remarks></remarks>
    93. Sub ebeneLesen(ByVal xmlKnoten As XmlNode, ByVal treeKnoten As TreeNode)
    94. tvwSchlüssel += 1
    95. treeKnoten.Text = xmlKnoten.Name
    96. Select Case True
    97. Case rbOuterXml.Checked
    98. treeKnoten.Tag = "OuterXml:" & vbCrLf & xmlKnoten.OuterXml
    99. Case rbInnerXml.Checked
    100. treeKnoten.Tag = "InnerXml: " & vbCrLf & xmlKnoten.InnerXml
    101. Case rbInnerText.Checked
    102. treeKnoten.Tag = "InnerText: " & vbCrLf & xmlKnoten.InnerText
    103. Case rbAttributes.Checked
    104. treeKnoten.Tag = "Attribute: " & vbCrLf
    105. treeKnoten.Tag &= "Name" & vbTab & vbTab & "InnerText" & vbCrLf
    106. For Each xmlAtt As XmlAttribute In xmlKnoten.Attributes
    107. Dim s As String = xmlAtt.Name & vbTab
    108. If s.Length < Strings.Len("Name" & vbTab & vbTab) Then
    109. s &= vbTab
    110. End If
    111. treeKnoten.Tag &= s & xmlAtt.InnerText & vbCrLf
    112. Next
    113. Case rbTreeView.Checked
    114. treeKnoten.Tag = "Nr:" & vbTab & vbTab & "Text" & vbCrLf _
    115. & treeKnoten.Name & vbTab & vbTab & treeKnoten.Text
    116. Case Else
    117. treeKnoten.Tag = "InnerText: " & vbCrLf & xmlKnoten.InnerText
    118. End Select
    119. Dim tn As TreeNode
    120. Dim xn As XmlNode
    121. For Each xn In xmlKnoten.ChildNodes
    122. If xn.HasChildNodes Then
    123. tn = treeKnoten.Nodes.Add(tvwSchlüssel.ToString("00"), xn.Name)
    124. ebeneLesen(xn, tn)
    125. End If
    126. Next
    127. End Sub
    128. ''' <summary>
    129. ''' Ausgabe in txtAusgabe, txtXpfad und txtSuchen
    130. ''' </summary>
    131. ''' <param name="sender"></param>
    132. ''' <param name="e"></param>
    133. ''' <remarks></remarks>
    134. Private Sub tvw_AfterSelect(ByVal sender As System.Object, _
    135. ByVal e As System.Windows.Forms.TreeViewEventArgs) _
    136. Handles tvw.AfterSelect
    137. txtAusgabe.Text = e.Node.Tag
    138. tvwAusgewählt = txtSuchen.Text
    139. txtSuchen.Text = e.Node.Name
    140. txtXmlPfad.Text = Replace(e.Node.FullPath, "\", "/")
    141. End Sub
    142. ''' <summary>
    143. ''' Lädt TreeView neu und navigiert zum ausgewählten Knoten
    144. ''' </summary>
    145. ''' <param name="sender"></param>
    146. ''' <param name="e"></param>
    147. ''' <remarks></remarks>
    148. Private Sub Darstellung(ByVal sender As Object, _
    149. ByVal e As System.EventArgs) _
    150. Handles rbTreeView.Click, _
    151. rbOuterXml.Click, _
    152. rbInnerXml.Click, _
    153. rbInnerText.Click, _
    154. rbAttributes.Click
    155. txtAusgabe.Clear()
    156. tvwFüllen()
    157. If tvwAusgewählt = "" Then
    158. If txtSuchen.Text <> "" Then
    159. tvwAusgewählt = txtSuchen.Text
    160. Else
    161. tvwAusgewählt = tvw.Nodes(0).Name
    162. End If
    163. End If
    164. Try
    165. tvw.SelectedNode = tvw.Nodes.Find(tvwAusgewählt, True)(0)
    166. Catch ex As Exception
    167. MessageBox.Show("Tree-Knoten nicht gefunden!")
    168. End Try
    169. End Sub
    170. ''' <summary>
    171. ''' Navigiert zum TreeNode in txtSuchen
    172. ''' </summary>
    173. ''' <param name="sender"></param>
    174. ''' <param name="e"></param>
    175. ''' <remarks></remarks>
    176. Private Sub btnSuchen_Click(ByVal sender As System.Object, _
    177. ByVal e As System.EventArgs) _
    178. Handles btnSuchen.Click
    179. tvwAusgewählt = txtSuchen.Text
    180. Try
    181. tvw.SelectedNode = tvw.Nodes.Find(tvwAusgewählt, True)(0)
    182. Catch ex As Exception
    183. MessageBox.Show("Tree-Knoten nicht gefunden!")
    184. End Try
    185. tvw.Select()
    186. End Sub
    187. #End Region
    188. #Region "XPath"
    189. ''' <summary>
    190. ''' Stellt Xml-Knoten zum ausgewählten Pfad zusammen
    191. ''' </summary>
    192. ''' <param name="sender"></param>
    193. ''' <param name="e"></param>
    194. ''' <remarks></remarks>
    195. Private Sub btnXPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    196. Handles btnXPath.Click,
    197. txtXmlPfad.Validated
    198. Dim xmlPfad As String = txtXmlPfad.Text
    199. Dim sAus As String = ""
    200. If xmlPfad <> "" Then
    201. Try
    202. Dim knoten As XmlNodeList = xmlDok.SelectNodes(xmlPfad)
    203. sAus = "Anzahl knoten: " & knoten.Count & vbCrLf
    204. For Each k As XmlNode In knoten
    205. Dim cUnterknoten As Integer = 0
    206. For i = 0 To k.ChildNodes.Count - 1
    207. Console.WriteLine(i)
    208. Console.WriteLine(k.ChildNodes(i).Name)
    209. If k.ChildNodes(i).Name <> "#whitespace" Then
    210. cUnterknoten += 1
    211. End If
    212. Next i
    213. sAus &= "Name: " & k.Name & " Echte Unterknoten: " _
    214. & cUnterknoten & vbCrLf
    215. For Each uk As XmlNode In k.ChildNodes
    216. If uk.HasChildNodes Then
    217. sAus &= "Name: " & uk.Name & vbTab _
    218. & "InnerText: " & uk.InnerText & vbCrLf
    219. End If
    220. Next
    221. Next
    222. Catch ausnahme As Exception
    223. MessageBox.Show("Fehler beim Einlesen" & vbCrLf & vbCrLf _
    224. & ausnahme.Message)
    225. End Try
    226. End If
    227. txtAusgabe.Text = sAus
    228. End Sub
    229. #End Region
    230. End Class


    Veschoben. Code-Tag eingefügt. Sehr langen Code in Spoiler platziert. ~Thunderbolt
    Bilder
    • KnotenInfo.png

      19,65 kB, 720×418, 133 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Hallo,


    Bitte setzte zunächst einen Code-Tag um den Ellenlangen Code und darum noch einen Spoiler, da kann man das besser lesen und es sprengt nicht deinen Anfangspost.

    Was hast du für die oben stehenden Fragen schon für Ansätze?

    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Entweder du gibst die Aufgabe falsch wieder, oder der Aufgabensteller [...hier abfällige Bermerkung ausgelassen...]
    Imo ist die Aufgabe nicht sinnvoll beantwortbar, aber ich kann sie ja mal beantworten:

    mket1980 schrieb:

    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.
    natürlich in keiner Methode - läuft doch alles bestens

    • Stellen Sie fest, ob die Anzahl der Attribute zu einem Knoten > 0 ist.
    ok, hab ich gemacht

    • In diesem Fall prüfen Sie, ob der Name des ersten Attributs „Nr“ ist.
    das auch - ja, kommt vor.

    • In diesem Fall verwenden Sie die Eigenschaften Name und Value des Attributs.
    äh - verwenden wozu? ?(

    • Schreiben Sie auch Zuweisungen für alle anderen Fälle.
    äh - alle anderen Fälle von was?
    Laut Einstein gibt es unendlich viele andere Fälle, ich kann gerne anfangen, für ein paar von denen Zuweisungen zu schreiben:

    VB.NET-Quellcode

    1. private sub ZuweisungenFuerFaelle
    2. dim a = 0 ' für den ersten Fall
    3. a = 1 ' für den 2. Fall
    4. a =2 ' für einen anderen Fall
    5. a = 3 ' für noch einen anderen
    6. a = 4 ' für ...
    7. a = 42 ' für alle Fälle
    8. a = 5 ' für einen anderen Fall
    9. 'glaub mir - ich könnt ewig so weiter machen
    10. end sub