[Toulouse-pm] xmltwig: element->first_child ($optional_cond) ?

Michel Rodriguez mirod at xmltwig.com
Wed Dec 4 08:23:00 CST 2002


On Wed, 2002-12-04 at 14:17, Paul Gaborit wrote:
> At 0:17 +0100 4/12/02, Michel Rodriguez wrote:
> >Il est tard alors j'ai pas le temps de tester, mais $elt->first_child(
> >'zone[@code="3"]') doit marcher. Le probleme c'est si le code est dans
> >une variable, passqu'alors les syntaxes Perl et XPath se melangent
> >(entre les " et les @ surtout), et le plus simple c'est de faire un
> >sprintf:
> >
> >$elt->first_child( sprintf( 'zone[@code="%d"]', $code));
> >
> >Si je me suis plante dis-le et je testerai ;--)
> 
> C'est vrai que :
> 
> 	$elt->first_child("zone[\@code=\"$code\"]");
> 
> est peut-être moins lisible...

Dans ces cas la j'utilise qq{}, ca evite de backslasher les ":
$elt->first_child( qq{zone[\@code="$code"]});

> Il faut aussi penser aux cas où $code contient des guillemets ! ;-)

Dans ca depend...

En mode "normal" (pas de keep_encoding => 1) il suffit de faire 
$elt->first_child( qq{zone[\@code='$code']}); et ca marche (je sais, je
sais, qu'est ce qui se passe quand l'attribut a a la fois des " et des
'? J'y ai pas pense'... comme on dit "patches welcome" ;--)

En mode keep_encoding il faut connaitre a l'avance l'encodage exact de
l'attribut (qui peut etre ecrit zone='to"to' ou zone="to&quote;to") et
le reproduire exactement. Ca c'est les limites de ce mode, ou XML::Twig
essaye de passer l'info du document d'origine tel quelle, ce qui evite
les problemes d'encodages et d'entites remplacees intempestivement, mais
forcement oblige a tenir compte du format utilise dans ce genre de cas.

Bon, en tout cas si l'attribut est un nombre, comme ca a l'air, tout ca
c'est plutot de la sodomisation de dypteres ;--)

-- 
Michel Rodriguez <mirod at xmltwig.com>



More information about the Toulouse-pm mailing list