Imports System.Xml
Public Class DynXml
'Οριζουμε μια private μεταβλητή που θα κρατάει το document μας.
Private m_objXml As XmlDocument
'Χρειάζεται να εξηγήσω τι κάνει; 
Public ReadOnly Property Xml() As XmlDocument
Get
Return (m_objXml)
End Get
End Property
Public Sub New()
'Φτιάξε ένα άδειο XML Document. Οταν λέμε "αδειο", εννοούμε
'prolog και root element (ή αλλιώς document element)
m_objXml = CreateEmptyXmlDocument()
End Sub
'Προσθέτουμε ένα node. Αν δεν έχουμε βάλει τη δεύτερη παράμετρο,
'το node προστίθεται στο document element. Αλλιώς, προστίθεται στο node
'που του έχουμε πει εμείς.
Public Function AddNode(ByVal nodeName As String, _
Optional ByVal node As XmlNode = Nothing) As XmlNode
'Αυτό είναι το node που θα προσθέσουμε. Προσεξε οτι για τη δημιουργία του
'υπεύθυνο είναι το xmlDocument που λειτουργεί ως factory για τέτοιου είδους πράγματα
'(nodes, attributes) και όχι εμείς (δεν χρησιμοποιούμε πουθενα constructor)
Dim objNdToAppend As XmlNode
'Δινουμε όνομα κατά τη δημιουργία (από τις παραμέτρους της function)
'Γιατί το τρίτο argument είναι empty string; Ειναι το namespace, αλλα θα πρότεινα
'να μην τα θίξουμε σε αυτό το στάδιο.
objNdToAppend = m_objXml.CreateNode(XmlNodeType.Element, nodeName, "")
'Αν δεν πήραμε node, τότε θα προσθέσουμε στο document element.
'Κανουμε μια μικρή μαγκίτσα εδώ.
If node Is Nothing Then
node = m_objXml.DocumentElement
End If
Try
'Τοσο απλό. Απλά προσθέτεις ένα "παιδί" σε ένα υπάρχον node και βουαλά.
Return (node.AppendChild(objNdToAppend))
Catch ex As Exception
'TODO: Δικό σου error handling
End Try
End Function
'Προσθέτουμε ένα attribute σε ένα ήδη υπάρχον node.
'Τα attributes έχουν δύο μέρη: Ονομα και τιμή. Χρειαζόμαστε βέβαια και το node στο οποίο θα το προσθέσουμε.
Public Function AddAttribute(ByVal attrName As String, ByVal attrValue As String, ByVal node As XmlNode) As XmlAttribute
'Αυτό είναι το attribute που θα προσθέσουμε. Βλεπεις οτι και πάλι υπεύθυνο για τη
'δημιουργία του είναι το ίδιο το xml document object.
Dim objAttrToAdd As XmlAttribute
'Δινουμε όνομα κατά τη δημιουργία (από τις παραμέτρους της function)
objAttrToAdd = m_objXml.CreateAttribute(attrName)
'Δίνουμε τιμή (απο τις παραμέτρους της function)
objAttrToAdd.Value = attrValue
Try
Return (node.Attributes.Append(objAttrToAdd))
Catch ex As Exception
'TODO: Δικό σου error handling
End Try
End Function
'Αααα, πονηριά! Αντί να το φτιάχνουμε κάθε φορά φτιάξαμε μια function
'γιατί είμαστε τεμπελχανάδες!
Private Function CreateEmptyXmlDocument() As XmlDocument
Dim objXml As XmlDocument
objXml = New XmlDocument
Try
'Η LoadXml φορτώνει από string, η Load από αρχείο.
'Αφού το θέλουμε δυναμικά, το φτιάχνουμε δυναμικά! Θα μπορούσαμε όμως να είχαμε και ένα
'"Αδειο" document σε ένα αρχείο και να το φορτώσουμε από εκεί.
objXml.LoadXml("<?xml version=" + Chr(34) + "1.0" + Chr(34) + " encoding=" + Chr(34) + "UTF-8" + Chr(34) + "?><rt></rt>")
'Το γυρνάμε πίσω και όλα ωραία.
Return (objXml)
Catch ex As Exception
'TODO: Βαλε εδώ ο,τι error handling θέλεις, αν θέλεις.
End Try
End Function
End Class