Cancellazione nodi file XML

venerdì 19 dicembre 2008 - 19.47

perla0279 Profilo | Senior Member

Ciao

sono sempre io.......... Ho cambiato metodo Poi con calma proverò a lavorare sull'altro.

Volevo porvi un quesito:

Ho fatto un coclo che mi cancella tutti i nodi di un file XML
Try 'oggetto per il file xml Dim Xmlfile As New XmlDocument 'carico il file Xmlfile.Load(StrNomeFile & ".xml") 'lista di nodi Dim xmlNodi As XmlNodeList = Xmlfile.GetElementsByTagName(StrNodoDaEliminare) While (IntPosizione >= -1) 'utilizzo il metodo per eliminare tale valore Xmlfile.GetElementsByTagName(StrRadice)(0).RemoveChild(xmlNodi(IntPosizione)) Xmlfile.Save(StrNomeFile & "2.xml") System.IO.File.Copy(StrNomeFile & "2.xml", StrNomeFile & ".xml", True) IntPosizione = IntPosizione + 1 End While Catch ex As Exception End Try

Il codice funziona ma esce dal ciclo inaspettatamente e senza (almeno a parer mio) motivo logico ogni tanto

Questo è il file XML che vado a cancellare:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Per prova i nodi sono stati fatti tutti uguali............ ma ogni tanto esce dal ciclo riportando l'errore 'Riferimento ad un oggetto non impostato su un'istanza di oggetto'
con questo dettaglio
' in System.Xml.XmlNode.RemoveChild(XmlNode oldChild)
in xxxxx.rss.EliminaNodoXml(Int32 IntPosizione, String StrNomeFile, String StrNodoDaEliminare, String StrRadice) in xxxxxxt\rss.aspx.vb:riga 76'

Come posso risolverlo ??? Ho bisogno di cancellare tutti i nodi !!!

luigidibiasi Profilo | Guru

Quali sono in nodi che vuoi cancellare? L'indice numerico che usi probabilmente ti dà problemi ...
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

perla0279 Profilo | Senior Member

Del file xml che ho postato sopra vorrei cancellare tutti gli Item

luigidibiasi Profilo | Guru

Ciao,
credo che il problema risieda nell'uso dell'indice numerico che tu aggiorni ad ogni ciclo.

Io ho provato così e cancella gli item. (per file xml con ITEM nidificati và modificato nel ciclo di cancellazione.)

Dall'errore che hai postato credo che tu esegua più di una elaborazione durante la cancellazione degli item quindi non so quando
questo codice possa esserti utile:


Dim myXml As Xml.XmlDocument = New Xml.XmlDocument()
myXml.Load("C:\test.xml") // il file originale da aprire

// i nodi ITEM da eliminare
Dim toremove As Xml.XmlNodeList = myXml.GetElementsByTagName("item")

// un dizionario di comodo x l'eliminazione ( padre -> figli da eliminare )
Dim myD As Dictionary(Of Xml.XmlElement, ArrayList) = New Dictionary(Of Xml.XmlElement, ArrayList)
Dim tmpEX As Xml.XmlElement

// scorre i figli da eliminare e si crea la struttura di comodo
For Each tmpEX In toremove
If Not myD.ContainsKey(tmpEX.ParentNode) Then
myD.Add(tmpEX.ParentNode, New ArrayList)
End If
myD(tmpEX.ParentNode).Add(tmpEX) // non possiamo eliminarli da qui perchè stiamo enumerando
Next
// scorre la lista di comodo ed elimina i figli
Dim k As KeyValuePair(Of Xml.XmlElement, ArrayList)
Dim p As Integer
For Each k In myD
For p = 0 To k.Value.Count - 1
k.Key.RemoveChild(k.Value(p))
Next p
Next
// salva tutto in un nuovo file
myXml.Save("C:\test1.xml")

Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/

perla0279 Profilo | Senior Member

grazie

adesso sono riuscita a farlo funzionare :-) :-)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5