Je vais légèrement complexifié mon XML, si j'ai un souci, je le posterai ici.
Je vais légèrement complexifié mon XML, si j'ai un souci, je le posterai ici.
Bon, en rajoutant une profondeur dans mon XML, ça ne fonctionne plus :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="ISO-8859-1"?> <synopsis> <paragraph> Ce tutoriel a pour but de vous <u>expliquer</u> en quelques lignes comment <i><b>concevoir</b></i> un plugin <b>Nagios</b> respectant les normes <b>Nagios</b> avec <b>Perl</b>.<br/><font color="#800040">cvcv</font> </paragraph> </synopsis>
J'obtiens ce message d'erreur : cannot paste an element that belongs to a tree at D:\Ooo\odf\jmg.pl line 36
Code : Sélectionner tout - Visualiser dans une fenêtre à part $contexte->append_element($twig_paragraph);
Bon je sèche !! Sachant que j'aurais plus d'imbrications
Je suppose que tu as visualisé ce que contenait $twig_paragraph avant l'appel à append_element ?
Voici le procédure :Le print affiche bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 sub xml_paragraph { my ( $twig, $twig_paragraph ) = @_; print $twig_paragraph->text; $twig_paragraph->set_tag('text:p'); bless $twig_paragraph, odf_paragraph; $contexte->append_element($twig_paragraph); return; }Par contre après le bless bless $twig_paragraph, odf_paragraph;, je ne sais pas vraiment comment afficher le contenu .Ce tutoriel a pour but de vous expliquer en quelques lignes comment concevoir un plugin Nagios respectant les
normes Nagios avec Perl.cvcv
Voici un autre exemple :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="ISO-8859-1"?> <synopsis> <paragraph> Ce tutoriel a pour but de vous <u>expliquer</u> en quelques lignes comment <i><b>concevoir</b></i> un plugin <b>Nagios</b> respectant les normes <b>Nagios</b> avec <b>Perl</b>.<br/><font color="#800040">cvcv</font> </paragraph> </synopsis>
Procédure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 sub xml_paragraph { my ( $twig, $twig_paragraph ) = @_; print "AVANT : ",$twig_paragraph->text; $twig_paragraph->set_tag('text:p'); bless $twig_paragraph, odf_paragraph; print "APRES : ",$twig_paragraph->text; $contexte->append_element($twig_paragraph); return; }AVANT :
Ce tutoriel a pour but de vous expliquer en quelques lignes comment concevoir un plugin Nagios respectant les
normes Nagios avec Perl.cvcvAPRES :
Ce tutoriel a pour but de vous expliquer en quelques lignes comment concevoir un plugin Nagios respectant les
cannot paste an element that belongs to a tree at D:\Ooo\odf\jmg.pl line 42
at D:\Ooo\odf\jmg.pl line 26
at D:\Ooo\odf\jmg.pl line 26
normes Nagios avec Perl.cvcv
Remarque : tu devrais utiliser warn au lieu de print, ce qui évite le mélanger entre les messages de debug et les messages de warning de perl.
Le problème ne se situe peut-être pas dans $twig_paragraph mais dans $contexte ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 sub xml_paragraph { my ( $twig, $twig_paragraph ) = @_; warn "AVANT : ",$twig_paragraph->text,"\n"; $twig_paragraph->set_tag('text:p'); bless $twig_paragraph, odf_paragraph; warn "APRES TWIG : ",$twig_paragraph->text,"\n"; warn "APRES : get_paragraph : ", $contexte->get_paragraph(position => -1)->get_text,"\n"; $contexte->append_element($twig_paragraph); return; }Ligne 43 = apprendAVANT :
Ce tutoriel a pour but de vous expliquer en quelques lignes comment concevoir un plugin Nagios respectant les normes Nagios avec Perl.cvcv
APRES TWIG :
Ce tutoriel a pour but de vous expliquer en quelques lignes comment concevoir un plugin Nagios respectant les normes Nagios avec Perl.cvcv
APRES : get_paragraph :
cannot paste an element that belongs to a tree at D:\Ooo\odf\jmg.pl line 43
at D:\Ooo\odf\jmg.pl line 26
at D:\Ooo\odf\jmg.pl line 26
Je comprends pas trop pourquoi avec un niveau de plus dans le XML, ça lui pose souci. Là c'est comme s'il ne reconnaissait pas le paragraphe.
Ton get_paragraph ne retourne rien... c'est qu'il est vide ?
Autre idée : plutôt que de re-bénir (bless again) $twig_paragraph, ne vaudrait-il pas mieux créer un nouvel objet odf_paragraph avec $twig_paragraph->text() ?
Bon pour get_paragraph vide, en fait c'est normal vu que le paragraphe n'a pas été rattaché avec append. Il donne le même résultat sur le XML à 1 niveau de profondeur.
Bah si je fais ça (ce que j'ai fait au tout début), on revient à mon problème initial pour pouvoir identifier et modifier le styles des données entre balise <b> .
jmg avait donné cette solution avec bless qui resolve le souci, mais ça ne fonctionne pas dès qu'il y a plusieurs niveau dans le XML, ce qui est le cas de tous mes fichiers XML (sinon ça n'a pas de sens )
ou bien, il faudrait trouver un moyen avec XML::Twig de pouvoir isoler certaines positions. Par exemple :
Il faudrait que je sois capable de trouver que philou est en position 9 dans le texte bonjour philou et jmg afin d'utiliser la méthode set_span d'ODF
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part <paragraph>bonjour <b>philou</b> et jmg</paragraph>
Et si tu créais une nouvelle instance d'XML::Twig avec juste le contenu de <paragraph> comme contenu à parser ? (je sais, c'est lourd, mais bon...).
C'est une idée, mais comme le XML peut avoir 1000 lignes et beaucoup d'imbrications. Mais bon, c'est une idée que je vais creuser, elle peut être pas mal .
Ca te permettra peut-être d'identifier ce qui ne convient pas.
Autre idée : dans ton $twig_paragraph, il y a sans doute une référence au tag parent. Essaye de la supprimer avant de re-bénir en odf_paragraph, à moins que XML::Twig sache détacher un sous-arbre de son arbre principal, ce qui serait encore mieux.
Je vais creuser XML::Twig !!
Je m'éclipse jusqu'à lundi matin. Bon week-end.
Bon, je n'ai pas tout testé mais tu as vu juste philou !!!
J'ai fait ceci :
en utilisant cut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 sub xml_paragraph { my ( $twig, $twig_paragraph ) = @_; $twig_paragraph->cut; $twig_paragraph->set_tag('text:p'); bless $twig_paragraph, odf_paragraph; $contexte->append_element($twig_paragraph); return; }ça à l'air de fonctionner. Je poursuis mes tests.cut
Cut the element from the tree. The element still exists, it can be copied or pasted somewhere else, it is just not attached to the tree anymore.
Note that the "old" links to the parent, previous and next siblings can still be accessed using the former_* methods
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager