Newsgroup: it.comp.os.win.windows10
Titolo: Programma per editare .xml

Mi servirebbe un programma che permetta di editare un .xml (48K righe),
recercando automaticamente una chiave contenente un numero tra 0 e 100,
e quando la trova (ce n'è circa una ogni 5 righe), mi aggiunga un'altra
chiave con la differenza tra 100 ed il valore della chiave trovata. Per
il resto, l'xml non deve essere modificato. Esiste già qualcosa del
genere?
 
-- 
Per contattarmi, togliere -NOSPAM- dall'indirizzo.
To contact me, remove -NOSPAM- from address.

 genere?
 
Aladi', magna tranquillo. ;-)

 tra 0 e 100, e quando la trova (ce n'è circa una ogni 5 righe), mi
 
https://microsoft.github.io/XmlNotepad/
 
 
 

 
 
E' da parecchio che non seguo più la programmazione, ma credo che a te 
serva qualcosa che accetti espressioni booleane, non un semplice editor 
con trova/sostituisci. E non ho idea se potresti risolvere in automatico 
anche con qualcosa del genere...
A memoria, per windows, potrei consigliarti di provare notepad++ (che 
ovviamente edita anche gli .xml). Però voglio godere del beneficio 
d'inventario :-)
 
 
 
-- 
__________________________________________
 
Merely Job: 
http://www.sergiotressino.it/
 
Leisure: 
http://trextrips.altervista.org/
 
__________________________________________

 
https://microsoft.github.io/XmlNotepad/
 
E con questo si possono ricercare automaticamente dei tag, aggiungerne
di nuovi dopo quelli trovati, con valori calcolati a partire dal tag
trovato?


 d'inventario :-)
 
Notepad++ potrebbe funzionare, ma si dovranno usare le regexp nel
dialogo "find/replace"
 

 trovato?
 
https://microsoft.github.io/XmlNotepad/#help/find/
 
 
 

 d'inventario :-)
Ce l'ho. Ma c'è sempre il problema del calcolo.
 
Probabilmente ci vuole qualcosa di più specifico, un editor xml che
riconosca i tag ed i valori, e sia in grado di applicarci delle
funzioni.


 
https://microsoft.github.io/XmlNotepad/#help/find/
 
Mi risulta che: "regex cannot do math"


 </tagtrovato>+<ritornoacapo>+<nuovotag></nuovotag> non sarebbe un
 
bella fesseria, se vuoi veramente lavorare con XML butta giù due righe
di codice in un qualsiasi linguaggio decente che abbia un parser XML ed
a quel punto fai quello che vuoi, altro che "ritorno a capo" (che tra
l'altro per i tag XML non ha alcun senso)
 
bah :P
 

 
 
Excel



già... solo che poi, quando vai a salvare ...
 
 
 

 modificato. Esiste già qualcosa del genere?
 
Esiste un porting di parecchi comandi linux su windows,
l'ho usato in passato per problemi simili anche se non
così complessi come il tuo. Il comando/file meno lontano
dalla tua necessità, che io sappia è "sed" (stream editor)
che fa qualsiasi cosa. Però a te serve un approccio a
linee quindi suppongo servirà uno script che prenda ogni
linea e la passi a "sed" e poi rediriga l'output
modificato su un file in append, poi cancelli l'originale 
e rinomini il temporaneo.
 
Se non risolvi con qualcosa di più semplice io credo che 
potresti fare la domanda sul gruppo linux, cercare questo 
porting (ora non ricordo come si chiama), installarlo e 
provare.
 
Scusa se non sono stato utile ma sto completamente
perdendo la memoria.
 
 
-- 
- Amore, tu piangi. Che hai fatto?
- Non mi ascolti mai, per te sono solo
   un oggetto...
- Intendevo, che hai fatto per cena?

 così complessi come il tuo.
 
WSL
 
https://docs.microsoft.com/en-us/windows/wsl/install
 
 
ma non credo ci sia bisogno di quello, il problema si può risolvere
anche con powershell (per quanto non mi piaccia)
 

 piaccia)
 
Dovevo immaginarlo, è un linguaggio che non so se è più
brutto di AutoHotkey (che all'inizio mi sembrava il Santo
Graal di Windows) e per questo non l'ho mai imparato. :(


 già... solo che poi, quando vai a salvare ...
Infatti. Già preso in considerazione e lasciato perdere. Tra l'altro le
sequenze dei tag non è regolare.
 
-- 
Per rispondere, togliere -NOSPAM- dall'indirizzo.

 provare.
Sul computer con cui lavoro abitualmente, ho sia delle macchine virtuali
Windows, sia macOS e sia Linux. La soluzione mi va bene su qualsiasi
sistema.


 La soluzione mi va bene su qualsiasi sistema.
P.S. Perņ sed sembra incepparsi sui caratteri speciali presenti nel
testo.


 Esiste già qualcosa del genere?
 
puoi partire dal codice VBS sotto e modificarlo per elaborare il file
XML come desiderato e poi salvarlo
 
 
'
'  xmltest.vbs
'
 
Dim xmlFile
Dim root  
Dim xmlDoc  
Dim child  
Dim indent  
 
xmlFile = "D:\test\xmltest.xml"
 
indent=0  
 
Set xmlDoc = createXmlDomDocument(xmlDoc)  
xmlDoc.async = False  
xmlDoc.validateOnParse=False  
xmlDoc.load xmlFile  
If xmlDoc.parseError.errorcode = 0 Then  
  treeWalk(xmlDoc)  
  printf(vbCrLf)
Else  
  printf("There was an error in : " & xmlFile &"</P><P>Line: " & _  
         xmlDoc.parseError.line & vbCrLf & _  
         "Column: " & xmlDoc.parseError.linepos)
End If  
 
 
Sub printf(sTxt)
  WScript.StdOut.Write sTxt
End Sub
 
Function createXmlDomDocument(xd)  
  On Error Resume Next  
 
  Set xd = CreateObject("MSXML2.DOMDocument.6.0")  
  If (IsObject(xd) = False) Then  
    MsgBox "DOM document not created. " & _
           "Check MSXML version used in createXmlDomDocument." 
  Else  
    Set createXmlDomDocument = xd  
  End If  
End Function  
 
Function attributeWalk(node)  
  For i=1 to indent  
    printf(" ")  
  Next  
  For Each attrib In node.attributes  
    printf("|--")  
    printf(attrib.nodeTypeString)  
    printf(":")  
    printf(
attrib.name
)  
    printf("--")  
    printf(attrib.nodeValue)  
    printf(vbCrLf)  
  Next  
End Function  
 
Function treeWalk(node)  
  Dim nodeName  
 
  indent=indent+2  
  For Each child In node.childNodes  
    For i=1 to indent  
      printf(" ")  
    Next  
    printf("|--")  
    printf(child.nodeTypeString)  
    printf("--")  
    If child.nodeType<3 Then  
      printf(child.nodeName)  
      printf(vbCrLf)  
    End If  
    If (child.nodeType=1) Then  
      If (child.attributes.length>0) Then  
        indent=indent+2  
        attributeWalk(child)  
        indent=indent-2  
      End If  
    End If  
    If (child.hasChildNodes) Then  
      treeWalk(child)  
    Else  
      printf child.text  
      printf(vbCrLf)  
    End If  
  Next  
  indent=indent-2  
End Function  
 
 

 XML come desiderato e poi salvarlo
 
Grazie. Proverò a studiarmelo, ma non sembra il Visual Basic che
ricordavo io... e sono veramente anni che ci metto mano (probabilmente
dai tempi di Windows 3.x).


 dai tempi di Windows 3.x).
 
è un pezzo di vbscript (vbs), per provarlo ti basta salvarlo come
xmltest.vbs, cambiare il percorso ed il nome file specificato in
"xmlFile" all'inizio e poi, dal prompt lanciarlo con
 
cscript //nologo xmltest.vbs
 
lo script carica il file usando il parser XML DOM nativo e poi fa il
dump dello stesso a video, senza modificarlo
 
Per editare il file, ti consiglio questo editor
 
https://www.vbsedit.com/
 
 
dato che ha anche "intellisense" e facilita la stesura del codice
 
ciao
 

 dato che ha anche "intellisense"
Cioč?


anche con powershell (per quanto non mi piaccia)
 
Anche a me pice poco powershell, molto meglio il visual basic script, e a quanto
ho visto gli script in vbs funzionano anche su W11.
 
 
-- 
ciao
  Stefano

 XML come desiderato e poi salvarlo
 
Bel lavoro (che conferma quanto dico in giro da parecchio tempo[1]), ma credo
che con Powershell si faccia in molte meno righe:
 
$xml = [xml]'
<office>
  <staff branch="Hanover" Type="sales">
    <employee>
        <Name>Tobias Weltner</Name>
        <function>management</function>
        <age>39</age>
    </employee>
    <employee>
        <Name>Cofi Heidecke</Name>
        <function>security</function>
        <age>4</age>
    </employee>
  </staff>
</office>
'
 
# $xml=New-Object XML
# $xml.Load("FE6Work.xml")
 
$nodes=$xml.SelectNodes("/office/staff")
foreach($node in $nodes) {
    $node.SetAttribute("site", "1");
}
$xml.Save("FE6Work_new.xml")
 
Enrico ;)
[1] agli amministratori Windows Powershell non serviva. Solo che quelli che lo
sapevano erano troppo, troppo pochi

 genere?
 
puoi provare awk oppure sed, le utility di linux
lo trovi su sourceforge gnuwin32
C:\Programmi\GnuWin32
magari funziona anche su Win10.