2012-10-09 3 views
2

Notre application est à la réception pour effectuer une rétro-analyse de données XML. Notre application n'a pas Java ou .NET disponible, mais fonctionne sous Unix, donc elle a awk et Perl.supprimer xml déclaration de xml Données utilisant perl ou awk

Les messages XML dans le fichier contient:

<?xml version="1.0" encoding="ISO-8859-1" ?> 

J'ai essayé quelques options en Perl et awk pour les faire retirer, mais n'a pas pu obtenir ces à travailler:

perl -p -i -e "s/<?xml version="1.0" encoding="ISO-8859-1" ?>//g" inputFile 
perl -p -i -e "s/<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>//g" inputFile 
perl -p -i -e "s/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g" inputFile 

Tous autre option pour le faire en utilisant PERL ou AWK?

+1

Utilisez-vous un analyseur XML lors de la réception du code XML? La déclaration XML est utile pour un analyseur, et essayer de traiter n'importe quel XML significatif avec n'importe quoi sauf un analyseur conduira à la folie. Et, si vous êtes sous Unix, vous avez toutes sortes de langues à votre disposition, si vous les installez. –

+0

Jetez un oeil à "[Comment puis-je extraire un document XML avec awk, Perl, ou Python?] (Http://stackoverflow.com/a/909076/128421)" pour une réponse similaire. –

+0

Votre code Perl ne fonctionne pas car '?' Est un métacaractère d'expression régulière. Remplacez le '?' Par '.' ou' \? 'Dans chaque cas et vous devriez être OK. –

Répondre

1

Cela a fonctionné pour moi sans écraser le fichier de données:

perl -p -e 's/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g' 

Je n'écrasent le fichier (-i) quand j'étais sûr que j'avais le travail de base regex ng sans faire de dégâts.

+0

Merci @JonathanLeffler. Ça a marché. – diaryfolio

1

Vous n'avez pas à faire correspondre la chaîne entière si votre fichier est XML. <?xml version est suffisant.

Essayez:

sed -i '/<\?xml version/d' file 

Test

kent$ echo '<?xml version="1.0" encoding="ISO-8859-1" ?> 
foo 
bar 
xyz 
hello 
there'|sed '/<\?xml version/d' 
foo 
bar 
xyz 
hello 
there 
+0

@ dessus, cela n'a pas fonctionné. "sed: option illégale - je". J'ai essayé sans "-i" option, mais il a tronqué le message de manière incorrecte. – diaryfolio

+0

@diaryfolio voir le test en réponse, il a donné ce que vous voulez, n'est-ce pas? – Kent

+0

'$ cat inputFile.xml lundi ' ' $ cat inputFile.xml | sed '/ <\? xml version/d'' ' $ ' On dirait que c'est l'ensemble tronqué du message – diaryfolio

Questions connexes