Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1350 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [SED/XHTML] Supression d'un NOSCRIPT imbriqué dans un SPAN

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SED/XHTML] Supression d'un NOSCRIPT imbriqué dans un SPAN

n°1042847
Jeddo
A nice place to live
Posté le 18-05-2008 à 12:15:44  profilanswer
 

Bonjour à tous.  :hello:

 

Je traite actuellement des (vieux) fichiers HTML "non conformes" aux standards. Je les nettoie avec tidy pour qu'il respecte la dtd transitional de XHTML. Seulement tidy ne nettoie pas tout, en particulier il laisse des balises NOSCRIPT imbriquées dans des SPAN, du coup les fichiers XHTML produits ne sont pas valides.

 

Je souhaite donc faire un prétraitement afin de supprimer ces balises NOSCRIPT, à savoir simplement supprimer ces balises et ce qu'elles contiennent, avant de fournir les fichiers à tidy. Pour l'instant, j'ai une solution provisoire qui ne me satisfait pas, avec sed :

 

s/<NOSCRIPT.*\/NOSCRIPT>//g

 

La directive précédente permet de virer toutes les balises NOSCRIPT et ce qu'elles contiennent du fichier (je ne sais pas si ça marche sur plusieurs lignes ou si c'est réduit à une seule ligne), même celles qui sont valides, c'est-à-dire pas forcément dans la portée d'un SPAN.

 

En résumé, de ça :

 

un peu de texte <SPAN> différentes
balises dont <NOSCRIPT> du
blabla </NOSCRIPT> encore un peu
de choses ici </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué

 

je veux obtenir ça :

 

un peu de texte <SPAN> différentes
balises dont
 encore un peu
de choses ici </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué

 

Je ne sais pas si c'est faisable avec sed (je lis partout que c'est puissant, l'occasion de le prouver :o), mais ça m'arrangerait vu que j'intègre ce prétraitement avec d'autre commandes sed dans un fichier de directives.

 

Merci de votre aide.

 

Bon dimanche. :)


Message édité par Jeddo le 18-05-2008 à 12:18:08

---------------
FREE DATOUNE
mood
Publicité
Posté le 18-05-2008 à 12:15:44  profilanswer
 

n°1043315
Combi_A_Ve​ndre
Posté le 19-05-2008 à 19:49:28  profilanswer
 

Bonsoir,
 
Je n'ai pas décortiqué la réponse, mais je crois que la réponse est ici :
http://linuxfr.org/forums/26/7199.html
 
vw.

n°1043323
Jeddo
A nice place to live
Posté le 19-05-2008 à 20:31:23  profilanswer
 

Merci de ta réponse.
 

$ cat sed.test
un peu de texte <SPAN> différentes
balises dont <NOSCRIPT> du
blabla </NOSCRIPT> encore un peu
de choses ici </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué
$ cat sed.test | sed -e '/\<<NOSCRIPT>\>/,/\<<\/NOSCRIPT>/p'
un peu de texte <SPAN> différentes
balises dont <NOSCRIPT> du
blabla </NOSCRIPT> encore un peu
de choses ici </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué


 
Ça n'a pas l'air de fonctionner.
Je ne vois pas non plus comment sélectionne les <NOSCRIPT> seulement s'ils sont imbriqués dans un <SPAN>.


---------------
FREE DATOUNE
n°1043329
sub1
Posté le 19-05-2008 à 20:49:42  profilanswer
 

Hello,
 
sans avoir testé je suis pas sur que sed fasse l'affaire, il serai peut être mieux de passer par un script (perl par ex.) afin de récuperer, via regexp, les balises span puis noscript.

n°1043331
Combi_A_Ve​ndre
Posté le 19-05-2008 à 20:54:51  profilanswer
 

Tu trouveras de bons indices ici : Pattern matching across several lines  
http://www.cs.utk.edu/~vose/c-stuff/sed_tutorial.html
 
Mais c'est sur que ce serait sans doute plus propre en perl comme le dit sub1.
 
vw

n°1043345
limax
Posté le 19-05-2008 à 22:07:56  profilanswer
 

moi voila ce que je ferai  
-> j'enleverai les newlines en carractère par exemple XXX ,  
-> je fais mes changements  
-> puis reremplace XXX par un newline.
 
J'utilise plus particulièrement vim et pour le 1°  je tape ceci :%s/\n/ XXX /

n°1043364
franceso
Posté le 19-05-2008 à 22:52:47  profilanswer
 

je connais pas sed, mais voici un début de solution en perl :

~/tmp> cat jeddo.pl
#! /usr/bin/perl
 
use strict;
 
my $content = join "", <>;
$content =~ s|(<SPAN>.*)<NOSCRIPT>.*</NOSCRIPT>(.*</SPAN> )|$1$2|gs;
print $content;

~/tmp> cat essai.txt
un peu de texte <SPAN> différentes
balises dont <NOSCRIPT> du
blabla </NOSCRIPT> encore un peu
de choses ici </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué

~/tmp> ./jeddo.pl essai.txt
un peu de texte <SPAN> différentes
balises dont  encore un peu
de choses ici </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué


 
N'hésite pas à demander si tu veux des explications sur la regexp ou le reste du script.
 
Il y a plein de choses à améliorer, mais c'est sans doute un début... En particulier, il y a peut-être dans la regexp des motifs trop gloutons qui peuvent poser problème.


---------------
TriScale innov
n°1043368
franceso
Posté le 19-05-2008 à 23:09:26  profilanswer
 

Pour les cas pathologiques (genre deux NOSCRIPT imbriqués dans le même SPAN), je  vois pas comment faire plus joliement qu'en réappliquant plusieurs fois la regexp.
 

~/tmp> cat jeddo.pl
#! /usr/bin/perl
 
use strict;
 
my $content = join "", <>;
while ($content =~ s|(<SPAN>.*)<NOSCRIPT>.*?</NOSCRIPT>(.*</SPAN> )|$1$2|gs) {1;}
print $content;

~/tmp> cat essai.txt
<SPAN>toto</SPAN> un peu de texte <SPAN> différentes
balises dont <NOSCRIPT> du
blabla </NOSCRIPT> encore un peu
de choses ici <NOSCRIPT>un deuxieme noscript</NOSCRIPT> </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué

~/tmp> ./jeddo.pl essai.txt
<SPAN>toto</SPAN> un peu de texte <SPAN> différentes
balises dont  encore un peu
de choses ici  </SPAN> et là ou là <NOSCRIPT> ça on peut
garder </NOSCRIPT> c'est pas
imbriqué


---------------
TriScale innov
n°1044837
Jeddo
A nice place to live
Posté le 24-05-2008 à 12:04:36  profilanswer
 

Merci pour vos propositions, je vais regarder ça de plus près :)


---------------
FREE DATOUNE
n°1044839
Mjules
Modérateur
Parle dans le vide
Posté le 24-05-2008 à 12:06:57  profilanswer
 

c'est un peu HS, mais t'es tu penché sur l'extension python BeautifulSoup qui permet de faire plein de truc avec du html et notamment de retirer des éléments particuliers ?
http://www.crummy.com/software/Bea [...] 20elements


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
mood
Publicité
Posté le 24-05-2008 à 12:06:57  profilanswer
 

n°1044860
Jeddo
A nice place to live
Posté le 24-05-2008 à 12:57:49  profilanswer
 

Finalement j'ai retenu le script de francesco et intégré à mon script global :jap:
 
Pour sed, la question reste ouverte.


---------------
FREE DATOUNE
n°1044865
Jeddo
A nice place to live
Posté le 24-05-2008 à 13:02:01  profilanswer
 

Mjules a écrit :

c'est un peu HS, mais t'es tu penché sur l'extension python BeautifulSoup qui permet de faire plein de truc avec du html et notamment de retirer des éléments particuliers ?
http://www.crummy.com/software/Bea [...] 20elements


 
C'est vrai qu'on a aussi une partie de python dans notre traitement, mais ce n'est du tout pas moi qui m'en occupe :D.
Cela dit, je vais mettre ce lien de côté, ça pourrait servir vu qu'on aura pas mal de prétraitement à faire sur XML/XHTML.


---------------
FREE DATOUNE

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [SED/XHTML] Supression d'un NOSCRIPT imbriqué dans un SPAN

 

Sujets relatifs
[Sed] Remplacer les points par des espaces dans un numéro de téléphonescript avec commande SED
Commande SEDSed et execution d'une commande
traitement d'un fichier de retour d'email d'erreur avec SED[Debian]Supression noyau
[Sed] Intégration dans un script[Résolu] SED : complément
[Résolu] SED : insérer saut de ligne lorsque le premier caractère chansupression linux
Plus de sujets relatifs à : [SED/XHTML] Supression d'un NOSCRIPT imbriqué dans un SPAN


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR