PDA

Visualizza la versione completa : Esportazione blocchi XML


sapan
27-12-2016, 13:50
Buongiorno,

chiedo il vostro aiuto per una operazione per me pressoché impossibile:

L'ideale sarebbe con Bash Script, ma anche altri linguaggi andrebbero bene.

Da un file xml con 500.000 righe devo esportare dei blocchi racchiusi tra due tag:

esempio:
<tag1>
<tag2>
<tag-SI>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<ID>100474</ID>
</tag-SI>
<tag-NO>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<ID>100474</ID>
</tag-NO>
<tag-SI>
<nome>Bruno</nome>
<cognome>Bruni</cognome>
<ID>231223</ID>
</tag-SI>
</tag2>
</tag1>

Vorrei ottenere il seguente risultato:

<tag-SI>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<ID>100474</ID>
</tag-SI>
<tag-SI>
<nome>Bruno</nome>
<cognome>Bruni</cognome>
<ID>231223</ID>
</tag-SI>

Grazie in anticipo a tutti.

Scara95
27-12-2016, 17:03
Puoi usare qualsiasi cosa ti permetta di fare una query XPath. Ciò significa volendo anche un programma da installare che poi chiami dallo script batch

sapan
28-12-2016, 08:54
Puoi usare qualsiasi cosa ti permetta di fare una query XPath. Ciò significa volendo anche un programma da installare che poi chiami dallo script batch

Grazie della risposta, ho provato a usare alcuni dei programmi in giro, xmlint per esempio, ma tutti hanno problemi con la lettura del file, il fatto è che ha una struttura proprietaria (mi viene da pensare quello) e non si riesce a gestire. Per questo motivo lo volevo gestire come solo testo.

Al momento sto provando la stringa:


sed -n -e "/tag-SI/,/tag-SI/p"

ma non capisco perchè non si ferma al ultimo tag-SI, in prattica funziona ma quando ha finito di leggere l'ultimo tag poi continua a leggere il resto del file, ottenendo una qualcosa di simile a questo:

<tag-SI>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<ID>100474</ID>
</tag-SI>
<tag-SI>
<nome>Bruno</nome>
<cognome>Bruni</cognome>
<ID>231223</ID>
</tag-SI>
</tag2>
</tag1>
ecc...

sapan
28-12-2016, 11:02
questa è la stringa che funziona:

sed -n -e '/<tag-SI*/,/<\/tag-SI>/p'

Loading