Pagina 4 di 4

Re: [bash] verifica e inserimento stringa in un file

Inviato: venerdì 30 maggio 2014, 11:16
da tomm
piccolotauro2 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4591021#p4591021][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:

Codice: Seleziona tutto

[root@localhost apache-tomcat-6.0.39]# xmlstarlet --version
1.3.1
compiled against libxml2 2.7.6, linked with 20706
compiled against libxslt 1.1.26, linked with 10126
[root@localhost apache-tomcat-6.0.39]# 
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:)