View Full Version : [Vb.net e Xml]Uso di appendchild e creazione albero xml
tognesimo
30-04-2009, 08:26
Ciao a tutti, ho un xml con la seguente struttura:
<changes>
<change changedate="2009-04-28T10:30:24" user="Sistema role="Sistema">
<oldvalue>
<stato>9800gt pè gioca a crysys</stato>
</oldvalue>
<newvalue>
<stato>02 - Verifica contabile</stato>
</newvalue>
</change>
</changes>
Volevo replicare questa riga in vb.net.
Ho fatto la seguente porzione di codice:
Dim root = xml_mod.selectSingleNode("//changes")
Dim nodofiglio = xml_mod.createElement("change")
root.appendchild(nodofiglio)
Aggiunge il tag change ma non so come creare gli attributi.
tognesimo
30-04-2009, 09:20
Con questo codice sono riuscito a replicare la tab:
'Creazione riga tabella xml
Dim root = xml_mod.selectSingleNode("//changes")
Dim nodofiglio = xml_mod.createElement("change")
root.appendchild(nodofiglio)
Dim nodofiglio1 = xml_mod.createElement("oldvalue")
nodofiglio.appendchild(nodofiglio1)
Dim nodofiglio2 = xml_mod.createElement("stato")
nodofiglio1.appendchild(nodofiglio2)
Dim nodofiglio3 = xml_mod.createElement("newvalue")
nodofiglio.appendchild(nodofiglio3)
Dim nodofiglio4 = xml_mod.createElement("stato")
nodofiglio3.appendchild(nodofiglio4)
Adesso quello che voglio fare è la selectsinglenode di uno di questi nodi.Come faccio a beccare il nodo giusto?Ci sono almeno 100 tabelle di questo tipo ed ognuna corrisponde ad un record.
Aggiunge il tag change ma non so come creare gli attributi.
Dim at1 As Xml.XmlAttribute = xml_mod.CreateAttribute("nomeAttributo1")
at1.Value = "valoreAttributo1"
nodofiglio.Attributes.Append(at1)
Dim at2 As Xml.XmlAttribute = xml_mod.CreateAttribute("nomeAttributo2")
at2.Value = "valoreAttributo2"
nodofiglio.Attributes.Append(at2)
'...
'...
tognesimo
30-04-2009, 09:52
Dim at1 As Xml.XmlAttribute = xml_mod.CreateAttribute("nomeAttributo1")
at1.Value = "valoreAttributo1"
nodofiglio.Attributes.Append(at1)
Dim at2 As Xml.XmlAttribute = xml_mod.CreateAttribute("nomeAttributo2")
at2.Value = "valoreAttributo2"
nodofiglio.Attributes.Append(at2)
'...
'...
Grazie marco ma questo codice non funziona, dice:
type xml.xmlattribute non definito
Grazie marco ma questo codice non funziona, dice:
type xml.xmlattribute non definito
System.Xml.XmlAttribute, non può non funzionare. Non so che versione di VB hai, ma prova ad aggiungere manualmente il Rif. da Proprietà di Progetto...
Adesso quello che voglio fare è la selectsinglenode di uno di questi nodi.Come faccio a beccare il nodo giusto?Ci sono almeno 100 tabelle di questo tipo ed ognuna corrisponde ad un record.
Una via possibile è qualcosa del genere, utilizzando NodeType, ciclando in ogni nodo e verificandone tipo ed eventuale valore ( nell'esempio lst_xml è una ListBox di controllo... ) :
For Each N As Xml.XmlNode In root.ChildNodes
lst_xml.Items.Add(N.Name)
If N.Attributes.Count > 0 Then
For Each A As Xml.XmlAttribute In N.Attributes
lst_xml.Items.Add(" " & A.Name & " = " & A.Value)
Next
End If
For Each N1 As Xml.XmlNode In N.ChildNodes
Select Case N1.NodeType
Case Xml.XmlNodeType.Element
lst_xml.Items.Add(" " & N1.Name & " = " & N1.InnerText)
'Case ...
'Case ...
Case Else
'...
'...
End Select
Next
Next
O anche renderla ricorsiva per file Xml più complessi... ;)
tognesimo
30-04-2009, 17:36
Una via possibile è qualcosa del genere, utilizzando NodeType, ciclando in ogni nodo e verificandone tipo ed eventuale valore ( nell'esempio lst_xml è una ListBox di controllo... ) :
For Each N As Xml.XmlNode In root.ChildNodes
lst_xml.Items.Add(N.Name)
If N.Attributes.Count > 0 Then
For Each A As Xml.XmlAttribute In N.Attributes
lst_xml.Items.Add(" " & A.Name & " = " & A.Value)
Next
End If
For Each N1 As Xml.XmlNode In N.ChildNodes
Select Case N1.NodeType
Case Xml.XmlNodeType.Element
lst_xml.Items.Add(" " & N1.Name & " = " & N1.InnerText)
'Case ...
'Case ...
Case Else
'...
'...
End Select
Next
Next
O anche renderla ricorsiva per file Xml più complessi... ;)
Grazie dell'aiuto.Ho risolto:)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.