Pagina 4 di 4
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 11:16
da tomm
probabilmente l'opzione con il default namespace funziona solo da xmlstarlet 1.5. Se non puoi aggiornare il programma bisogna trovare un'altra soluzione ma ora come ora non saprei
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 11:19
da piccolotauro2
Grazie.
Ma riguardo il discorso sotto ti viene in mente qualcosa?
grazie
Il mio obiettivo è dato un xml con:
<Realm className=testo1>
ottenere un xml con:
<Realm className=testo1>
<Realm className=testo attributo2=testo2>
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 13:17
da tomm
xmlstarlet implementa xpath che è un linguaggio per interrogare xml molto potente. Se devi continuare a lavorare con xml non puoi fare a meno di studiarti bene il linguaggio xpath. Puoi cominciare qui:
http://www.w3schools.com/XPath/
Nel caso specifico, puoi cercare il nodo che ti interessa con questa sintassi:
xmlstarlet ed -L -i "/Server/Service/Engine/Realm[@className='testo2']" -t attr -n attributo2 -v testo2 server.xml
questo ti inserisce l'attributo solo al nodo /Server/Service/Engine/Realm che contiene l'attibuto className='testo2'
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 14:02
da piccolotauro2
xmlstarlet ed -L -i "/Server/Service/Engine/Realm[@className='testo2']" -t attr -n attributo2 -v testo2 server.xml
il problema è proprio questo....il className='testo2' lo devo creare
o meglio ne deve creare un altro perché già c'è className=testo1
quando creo un nuovo className=testo2 io vorrei:
<Realm className=testo1/>
<Realm className=testo2/>
mentre lui mi crea
<Realm className=testo 1 className=testo2>
e non c'è modo di non farglielo creare nuovo e non aggiornarlo
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 14:43
da tomm
Ma ti sei studiato xpath come ti avevo consigliato?
Comunque così crei un nuovo nodo:
xmlstarlet ed -L --subnode "/Server/Service/Engine" --type elem -n Realm -v "" server.xml
e così aggiorni solo il nodo che non ha ancora l'attributo.
xmlstarlet ed -L -i "/Server/Service/Engine/Realm[not(@className)]" -t attr -n className -v testo3 server.xml
nota la sintassi intuitiva: Realm[not(@className)]
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 14:58
da piccolotauro2
la avevo trovata su un sito questa sintassi...ma da me non funziona
l'elemento lo creo ma poi il className non me lo inserisce
a questo punto mi viene il dubbio che possa essere la versione di xmlstarlet
grazie comunque di tutto
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 30 maggio 2014, 15:31
da piccolotauro2
rettifico funziona:)