Come ti avevo detto, non ho dimestichezza con le istruzioni dedicate, perchè, se si padroneggia la manipolazione delle stringhe le istruzioni dedicate sono inutili per compiti semplici, il discorso cambia con HTML o XML complessi, ma ad oggi non ne ho mai sentito la necessità.
Restando nell'ambito della manipolazione delle stringhe hai due possibilità, una adatta se il nodo ha un'impostazione fissa, cioè il valore da cambiare si trova sempre nella stessa posizione nel nodo, la seconda è andare a caccia della posizione del valore da cambiare con
IndexOf, usando lo stesso metodo che ho usato per trovare:
HeadOffsetRegisters.
Nel primo esempio ti mostro come fare presumendo che i valori da cambiare si trovino sempre nella stessa posizione nel nodo, ho aggiunto tre buttons che simulano l'automazione:
Imports System.IO
Public Class Form1
Dim XML As String
Dim pos1 As Integer
Dim pos2 As Integer
Dim NodoOUT As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Multiline = True
TextBox1.WordWrap = False
XML = File.ReadAllText("XUSB.XML")
Dim NodoIN As String = "<HeadOffsetRegisters>"
NodoOUT = "</HeadOffsetRegisters>"
pos1 = XML.IndexOf(NodoIN)
pos2 = XML.IndexOf(NodoOUT)
TextBox1.Text = XML.Substring(pos1, pos2 - pos1 + NodoOUT.Length)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim XMLout As String = XML.Substring(0, pos1)
XMLout += TextBox1.Text
XMLout += XML.Substring(pos2 + NodoOUT.Length)
File.WriteAllText("XUSBmod.XML", XMLout)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' modifica PaletteRemap0
Dim NuovoValore0 = 8
TextBox1.Text = TextBox1.Text.Remove(68, 1).Insert(68, NuovoValore0)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
' modifica PaletteRemap1
Dim NuovoValore1 = 5
TextBox1.Text = TextBox1.Text.Remove(120, 1).Insert(120, NuovoValore1)
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
' modifica PaletteRemap2
Dim NuovoValore2 = 6
TextBox1.Text = TextBox1.Text.Remove(172, 1).Insert(172, NuovoValore2)
End Sub
End Class
Ho modificato il valore nella TextBox, così vedi il risultato immediato, ma se usi:
testo1 il codice non cambia.
Nel secondo esempio accedo direttamente al valore da modificare:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim NuovoValore0 = 1 ' Valore che si vuole assegnare a PaletteRemap0
Dim NuovoValore1 = 2 ' Valore che si vuole assegnare a PaletteRemap1
Dim NuovoValore2 = 3 ' Valore che si vuole assegnare a PaletteRemap2
XML = File.ReadAllText("XUSB.XML") ' carico il file
Dim pos = XML.IndexOf("<PaletteRemap0") ' indice del nome
XML = XML.Remove(pos + 37, 1).Insert(pos + 37, NuovoValore0) ' sostituzione vecchio valore con il nuovo
pos = XML.IndexOf("<PaletteRemap1") ' indice del nome
XML = XML.Remove(pos + 37, 1).Insert(pos + 37, NuovoValore1) ' sostituzione vecchio valore con il nuovo
pos = XML.IndexOf("<PaletteRemap2") ' indice del nome
XML = XML.Remove(pos + 37, 1).Insert(pos + 37, NuovoValore2) ' sostituzione vecchio valore con il nuovo
File.WriteAllText("XUSBmod.XML", XML) ' scrittura XML con i valori di PaletteRemap0/1/2 modificati
End Sub
Se il valore di PaletteRemap può avere anche due o più cifre, bisogna aggiungere una riga che ne riconosca il numero delle cifre e su remove, invece di 1, bisogna mettere il numero delle cifre trovate.
Resto sempre dell'avviso che mi piacerebbe vedere come fare la stessa cosa con XmlDocuments, XmlNode, XmlNodeList e ChildNodes.