[Risolto] Un aiutino per trasformare un file xml

Salve a tutti,
L’Agenzia delle entrate mi ha mandato il file contenente i modelli 730/4 dei clienti, dovrei farne un elenco con codice fiscale e denominazione in modo da crearmi i modelli in PDF divisi per azienda in modo da inviarli.
Il file (un xml), con grep, sono riuscito a trasformalo così

<m730:CodiceFiscale>12345678901</m730:CodiceFiscale> <m730:DenominazionePNF>denominazione della società</m730:DenominazionePNF> <m730:CodiceFiscale>98765432109</m730:CodiceFiscale> <m730:DenominazionePNF>un'altra società</m730:DenominazionePNF> il tutto moltiplicato per un totale di 720 righe. E prevedo che arriveranno altri file simili.

Lo vorrei trasformare così12345678901;denominazione della società 98765432109;un'altra società con sed sono riuscito a togliere le parti costanti (quelle racchiuse tra < e >) ma non sono riuscito a sostituire l’invio dopo </m730:CodiceFiscale> con il “;”.
Si può con sed? (per prima cosa) e se si come?

O, forse ancora meglio, conoscete programmi in grado di manipolare file xml, almeno fatti come questo (una sorta di database). Chiaramente non editor di testo :slight_smile:

Grazie a tutti

puoi provare conglomerate yum install conglomerate

è un editor di testi xml

Intanto grazie ad antonwen, ho già copiato i file (sia l’originale che quello ridotto con grep) sulla chiavetta e stasera provo conglomerate. Qui in ufficio ho solo i comandi standard sulla redhat.

Comunque ho trovato http://digilander.libero.it/jacknake/informatica/manipolation-text/lavori-sed/guida-sed01SP.html#terminatori-riga che dice:[quote][h]I terminatori di riga nel pattern space[/h]

Le sequenze di caratteri caricate nel pattern space sono le righe di testo provenienti dallo stream di input.

Le righe di testo terminano con un newline.

I caratteri di newline finali, benchè facenti parte della riga di testo, non sono caricati sul pattern space.

Proprio perché tale newline non è caricato nel pattern space, esso non influenza le verifiche di corrispondenza conseguenti alle espressioni regolari utilizzate negli script di SED.

Quando il pattern space è inviato, per qualsiasi causa, allo standard output, SED si preccupa di aggiungere nuovamente il newline finale.[/quote]
A quanto capisco con sed non posso eliminare il newline perché sed non lo legge! Giusto?

potresti usare il comando tr per eliminare le newline:

$ cat file_da_trasformare |tr "\n" " " >> file_trasformato

al posto delle newline ti mette uno spazio.
per maggiori informazioni:

$ man tr

Ma quanti comandi conosci?
Ho sostituito con il “;” tutti i newline poi con le espressioni regolari (tramite libreoffice) ho trasformato i

DenominazionePNF>; in DenominazionePNF>\n aggiungendo nuovamente il newline a fine riga.
E infine un po di pulizia per eliminare i tag.

Grazie

P.s.
Ho messo risolto perché la parte “urgente” è risolta ma se qualcuno conosce programmi per gestire i file XML come tabelle di DB per me può pure continuare.

[quote=andreamal]Ma quanti comandi conosci?
[/quote]
qualcuno…

@andreamal:
Il procedimento che stai tentando di mettere su, a mio modestissimo avviso è alquanto laborioso e, essendo esclusivamente manuale, credo che sia anche un po’ pericoloso. Sempre a mio avviso, la cosa migliore sarebbe quella di trovare un programma che sia in grado di leggere il file in xml a trascriverlo in un file di output.txt con quello che ti serve. Penso infatti che questa non sia l’unica volta in cui dovrai operare una simile trasformazione. Certo è difficile trovare proprio quello che faccia proprio quello che serve a te. Si potrebbe, al limite, scrivere un programma ad hoc.
:wink:

Se vuoi esplorare altre soluzioni, trattandosi di un xml potresti scriverti una xslt che lo trasforma sempre in un xml ma con campi tutti in un solo tag tipo

<item>12345678901;denominazione della società</item>
<item>98765432109;un'altra società</item>

o in alternativa affidarti a libreoffice partendo dal file xml originario.
Data --> XML source --> apri il file xml --> mappi i campi che ti interessano nelle celle --> export to csv

@ Punico
Stavo pensando di farmi uno scriptino con grep, tr e sed ma poi ho letto il post di Halloween …

[quote=halloween]o in alternativa affidarti a libreoffice partendo dal file xml originario.
Data --> XML source --> apri il file xml --> mappi i campi che ti interessano nelle celle --> export to csv[/quote]

Ci ho messo un pochino ma poi lo ho trovato.
Ho fatto un file di calc sul quale carico il file xml sul Foglio1 e nel Foglio2 (non mi andava di cambiare i nomi) ho l’elenco preciso.

Però ho dovuto installare libreoffice 4

Grazie anche a te

L’importante è che tu abbia risolto nel modo a te più comodo e sicuro. Comunque, nel caso in cui volessi affidarti ad un programmino su misura, credo di poterti dare una mano.
:wink: