Xml mit VB in .net

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von dingsda.

    Xml mit VB in .net

    Hallo VB-Paradise,

    wer kann mir bitte die Verwendung von Xml in .net ein bisschen erklären?

    was ich bisher verstanden hab:

    man erstellt ein XmlDocument-Objekt dann kann man mit Load eine xml-Datei einlesen und mit save die Xml-Datei wieder abspeichern.

    VB.NET-Quellcode

    1. Dim xmlDoc As New Xml.XmlDocument
    2. xmlDoc.Load(filename)
    3. xmlDoc.Save(filename)


    Wenn ich aber überhaupt noch gar keine xml-Datei habe sondern erst eine im VB-Code erstellen will... wie macht man dann das?

    Wie kann man z.B. ein Xml-Tag anlegen? mit den Tagnamen "dings" und dem Wert "123"

    Wie kann man ein Attribut zu diesem Xml-Tag anlegen? mit den Attributnamen "attr" und dem Wert "456"

    z.B. so:

    (dings attr="456")123(/dings)

    die runden Klammern sollen hier jezte mal eckig sein.

    bin mir nicht sicher ob ich die Begriffe richtig verwende...?

    was ist eigentlich der Unterschied zwischen einem XmlNode, XmlAttribut, XmlElement und XmlTextNode??

    wie kann man den Xml-Text formatiert in einer TextBox ausgeben, also so dass die Elemente richtig eingerückt erscheinen und nicht nur als "Suppe" alles in einer Zeile.

    Vielen Dank für alle Eure Erklärungen

    dingsda
    Hallo dingsda,

    schau Dir am besten mal dieses kleine Tutorial an. Dort sind die Grundlagen erklärt.

    Knoten mit Attributen schreiben:

    VB.NET-Quellcode

    1. With XMLWriter
    2. .WriteStartElement("dings")
    3. .WriteAttributeString("attr_1", "value_1")
    4. .WriteAttributeString("attr_2", "value_2")
    5. .WriteEndElement()
    6. End With


    Knoten mit Elementen schreiben:

    VB.NET-Quellcode

    1. With XMLWriter
    2. .WriteStartElement("dings")
    3. .WriteElementString("attr_1", "value_1")
    4. .WriteElementString("attr_2", "value_2")
    5. .WriteEndElement()
    6. End With


    Die Beispiele habe ich nicht getestet! Sollten so aber funktionieren.
    Attributen stehen immer mit in den "< >". Elemente stehen hingegen zwischen "> <". Teste einfach mal ein wenig mit dem Tutorial, dann passt das schon.


    Viele Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pry“ ()

    singu schrieb:

    XmlDocument ist nach meiner Meinung besser, weil da hat man alles wichtige drin und man benötigt nur eine Klasse.
    Das kommt halt auch immer drauf an, welchen Umfang das ganze annehmen soll. Habe XMLDocument auch schon verwendet. Klappt letztlich beides.
    Der Eintrag im Openbook ist natürlich ebenso sehenswert, keine Frage.
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%
    Hallo Pry und singu, vielen dank für die infos und die guten Links. ich hab es jetzt mal über das XmlDocument gelöst. Und zur Vereinfachung der Erzeugung des XmlDocuments hab ich mir ne Klasse gebaut XmlStack

    VB.NET-Quellcode

    1. Dim myDoc As Xml.XmlDocument
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. myDoc = New Xml.XmlDocument
    4. myDoc.AppendChild(myDoc.CreateXmlDeclaration("1.0", "iso-8859-1", ""))
    5. End Sub
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. Dim XStack As New XmlStack(myDoc, "MyDoc")
    8. With XStack
    9. .PushElement("Dings").AddAttribute("da", "456").SetText("Olala")
    10. .PopElement()
    11. .PushElement("Trara").AddAttribute("da", "12").AddAttribute("dada", "34")
    12. .PushElement("Dings", "da")
    13. .PopElement()
    14. .PushElement("Etc").AddAttribute("king", "23").AddAttribute("fung", "45")
    15. TextBox1.Text = .OuterXml
    16. End With
    17. End Sub
    18. Public Class XmlStack
    19. Private _doc As System.Xml.XmlDocument
    20. Private _stack As New System.Collections.Generic.Stack(Of System.Xml.XmlNode)
    21. Private _currentNode As System.Xml.XmlNode
    22. Public Sub New(ByVal newXmlDoc As System.Xml.XmlDocument, ByVal docRootElementName As String)
    23. _doc = newXmlDoc
    24. _currentNode = _doc
    25. Me.PushElement(docRootElementName)
    26. End Sub
    27. Public Function PushElement(ByVal aname As String) As XmlStack
    28. Dim newNode As Xml.XmlNode = _doc.CreateElement(aname)
    29. _currentNode.AppendChild(newNode)
    30. _currentNode = newNode
    31. _stack.Push(_currentNode)
    32. Return Me
    33. End Function
    34. Public Function PushElement(ByVal aname As String, ByVal aText As String) As XmlStack
    35. Me.PushElement(aname)
    36. _currentNode.InnerText = aText
    37. Return Me
    38. End Function
    39. Public Sub PopElement()
    40. _stack.Pop()
    41. _currentNode = _stack.Peek
    42. End Sub
    43. Public Function AddAttribute(ByVal aname As String, ByVal avalue As String) As XmlStack
    44. Dim newAttrib As Xml.XmlAttribute = _doc.CreateAttribute(aname)
    45. newAttrib.Value = avalue
    46. _currentNode.Attributes.Append(newAttrib)
    47. Return Me
    48. End Function
    49. Public Function SetText(ByVal aText As String) As XmlStack
    50. _currentNode.InnerText = aText
    51. Return Me
    52. End Function
    53. Public Function OuterXml() As String
    54. Return _doc.OuterXml
    55. End Function
    56. End Class

    doch irgendwie glaub ich langsam dass das mit dem XmlWriter doch ne sehr gute Idee wäre.
    ich hab den noch nicht so ganz begriffen.
    wie kann man mit dem XmlWriter den Xml-Text eines XmlDokuments indented und formatiert in einer TextBox ausgeben?
    könnt ich mir nochmal helfen?
    also irgendwie so?
    myXmlDoc.WriteContentTo(myXmlWriter)
    tschau
    dingsda

    Xml-Datei mit Einrückung formatiert in TextBox ausgeben

    OK, vielleicht war die Frage nicht gut gestellt; habs dann selber rausgefunden, war ja nicht so schwer ;)
    der Vollständigkeit halber hier noch die Antwort auf meine Frage

    VB.NET-Quellcode

    1. Public Sub ShowFormattedXmlDoc()
    2. Dim sw As New System.IO.StringWriter
    3. Dim xw As New System.Xml.XmlTextWriter(sw)
    4. xw.Formatting = System.Xml.Formatting.Indented
    5. xw.Indentation = 3
    6. myDoc.WriteContentTo(xw)
    7. TextBox1.Text = sw.ToString
    8. sw.Dispose()
    9. End Sub

    Gruß
    dingsda
  • Benutzer online 1

    1 Besucher

  • Tags

  • 3 Benutzer haben hier geschrieben