Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    83

    xml: aggiornare il valore dell'attributo di un nodo

    ciao a tutti...
    ho un file xml di questo tipo:

    <?xml version="1.0"?>
    <Root>
    <Intestazione>
    <CodAppello Value="29" />
    <Data Value="19/09/2006" />
    <Sede Value="camerino" />
    </Intestazione>
    <Corpo>
    <RigheTotali Value="1" />
    <Riga1 Value="ciao" />
    </Corpo>
    </Root>


    e devo aggiornare il nodo RigheTotali. ho scritto la seguente funzione:

    codice:
    Public Function updateNodo(ByVal nodo As String, ByVal attr As String, ByVal newval As String) As String
    ...
    Dim modified As Boolean = False
    doc = New XmlDocument
    doc.Load(path)
    reader = New System.Xml.XmlTextReader(path)
    	Do While (reader.Read)
    		Select Case reader.NodeType
    			Case XmlNodeType.Element
    				If String.Compare(reader.Name, nodo) = 0 Then
    					node = doc.ReadNode(reader)
    					node.Attributes(attr).Value = newval
    					modified = True
    				End If
    		End Select
    	Loop
    ...
    richiamata nel seguente modo:

    codice:
     
    	...
    	nr += 1
    	str = file.updateNodo("RigheTotali", "Value", nr)
    	...
    il problema è ke non ho nessun errore ma il valore di RigheTotali rimane semper ad 1.
    perchè? è errata la funzione di update, vero? se si, dove sbaglio?

    grazie a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    83
    praticamente sto parlando da sola!!!

    cmq non mi sono spiegata bene, la funzione sopra indicata non è che non mi aggiorna il nodo, non lo trova proprio!!! modified infatti mi rimane a false!!

    cmq ho provato a scrivere una nuova funzione... in questo caso riesco a trovare il nodo ma il valore dell'attributo non viene modificato. la nuova funzione è la seguente:

    codice:
    	Public Function updateNodo(ByVal padre As String, ByVal nodo As String, ByVal attr As String, ByVal newval As String) As String
    ...
    Dim root As XmlElement = doc.DocumentElement
    node = root.SelectSingleNode(nodo)
    Dim str As String
    For Each a In root.ChildNodes
    	If a.Name.Equals(padre) Then
    		node = a
    		For Each b In node.ChildNodes
    			If b.Name.Equals(nodo) Then
    				b.Attributes(attr).Value = newval
    				modified = True
    			End If
    		Next
    	End If
    Next
    ...
    richiamando la funzione nel seguente modo:

    str = file.updateNodo("Intestazione", "RigheTotali", "Value", 45)

    in questo caso non ho nessun tipo di errore ma il valore del nodo non cambia:

    <RigheTotali Value="1" />

    x'? grazie a tutti


  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    83
    ciao!!!
    come al solito ho lasciato qlc... dimenticavo di salvare!!!

    cmq scrivo la funzione completa, servisse a qlc...

    codice:
    'funzione che aggiorna il valore dell'attributo attr del nodo di nome nodo
    	Public Function updateNodo(ByVal padre As String, ByVal nodo As String, ByVal attr As String, ByVal newval As String) As String
    		Dim reader As System.Xml.XmlTextReader
    		Dim doc As XmlDocument
    		Dim node, a, b As XmlNode
    		Try
    			Dim modified As Boolean = False
    			doc = New XmlDocument
    			doc.Load(path)
    			Dim root As XmlElement = doc.DocumentElement
    			node = root.SelectSingleNode(nodo)
    			Dim str As String
    			For Each a In root.ChildNodes
    				If a.Name.Equals(padre) Then
    					node = a
    					For Each b In node.ChildNodes
    						If b.Name.Equals(nodo) Then
    							b.Attributes(attr).Value = newval
    							modified = True
    						End If
    					Next
    				End If
    			Next
    			If modified Then
    				doc.Save("temp.xml")
    				System.IO.File.Copy("temp.xml", path, True)
    				Return "OK"
    			Else
    				'non salvo x' non c'è stata nessuna modifica
    				Return "Nodo non trovato"
    			End If
    		Catch ex As Exception
    			If String.Compare(ex.Message, "Elemento di primo livello mancante.") = 0 Then
    				Return "File xml vuoto"
    			Else
    				Return ex.Message
    			End If
    		Finally
    			doc = Nothing
    		End Try
    	End Function

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    21
    Ciao ho anch'io il tuo problema e volevo chiederti cosa contiene la variabile Path??

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    21
    Ho risolto da sola grazie mille comunque

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.