PDA

View Full Version : [vb net 2008] creare un nuovo elemento su xml


superbau
15-10-2009, 18:09
salve,
mi sto scervellando da stamattina, ma non sono riuscito ad aggiungere questa benedetta riga... uffa..
vi posto il code:

xml:

<?xml version="1.0" encoding="utf-8"?>
<Chat>
<A1>bau</A1>
<A2>miao</A2>
</Chat>



Vbnet


Imports System.Xml
public ciao as string
'[...]
Private Sub Label17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label17.Click

'input box
Dim letturaXML As Object
Dim message, title As String
title = "Scrittura in un database xml"
message = "Scrivi qualcosa"
letturaXML = InputBox(message, title)



Dim path As String = "chat.xml"
'istanzio il documento
Dim Doc As New XmlDocument()
'lo carico in memoria
Doc.Load(path)
'recupero il nodo root
Dim element As XmlElement = Doc.DocumentElement
'recupero il valore all'interno del primo figlio dell'elemento root
Dim node As XmlNode = element.FirstChild



For Each node In element.ChildNodes
ListBox1.Items.Add(node.InnerText)
' ListBox1.Update()
ciao = ListBox1.Items.Count
ListBox1.SelectedItem = ciao
Next


'ecco qui vorrei aggiungere una nuovo elemento io ho fatto così
'ma però l'elemento me lo mette figlio di A2 invece dovrebbe essere figlio di 'chat...

Dim Anode As XmlNode
For Each node In element.ChildNodes
If node.Name.Equals("Chat") Then
'creo il nodo
Anode = Doc.CreateNode(XmlNodeType.Element, "A" & (ciao + 1), "")
'imposto il valore
Anode.InnerText = ""
'l'aggiungo al nodo indirizzo
node.AppendChild(Anode)
'salvo le modifiche
Doc.Save(path)
End If
Next

End Sub




nella parte finale è scritto come inserire il nuovo elemento, solo che me lo fa errato, nel senso che me lo inserisce come figlio di a2 anzi che di a3.

esce così:

<Chat>
<A1>bau</A1>
<A2>miao<A3></A3></A2>
</Chat>

mentre dovrebbe uscire così:

<Chat>
<A1>bau</A1>
<A2>miao</A2>
<A3></A3>
</Chat>


In pratica cosa vorrei fare?
potere popolare i miei elementi attraverso input box e quando questi sono finiti, crearne di nuovi in sequenza.
Quindi ho pensato di crearne uno ogni qualvolta ne popolo uno, così me ne resta sempre almeno uno libero.

MarcoGG
15-10-2009, 20:57
Dim XD As New Xml.XmlDocument()
XD.Load(nomeFile)
Dim root = XD.SelectSingleNode("Chat")

Dim nodofiglio = XD.CreateElement("A3")
nodofiglio.InnerText = "ArfArf"
root.AppendChild(nodofiglio)

XD.Save(nomeFile)
:D

superbau
16-10-2009, 12:35
sei il mio idolo.