Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

XML::Simple & ForceArray

4 réponses
Avatar
Pierre Pintaric
Bonjour à tous,

Je voudrais parser un fichier XML avec XML::Simple.
J'y arrive sans soucis, ça marche même très bien.

Mais il y a un truc que je voudrai faire, c'est de pouvoir forcer
certains éléments en tableau. Pour cela cool, il y a ForceArray[name].

Ca marche aussi bien sauf dans un cas particulier:

J'ai un élément 'lien' qui se retrouve dans plusier type sans avoir la
même définition. Pour certains, l'élément est optionnel, pour
d'autres, il peut se répéter plusieurs fois.

Un exemple:

<lessites>
<titre>La liste des sites</titre>
<lien>
<description>Le plus beau site du monde</description>
<lien>http://www.monsite.com/</lien>
<lien>
<lien>
<description>Le plus moche site de la Terre</description>
<lien>http://www.mochesite.com/</lien>
<lien>
<lien>
<description>Le site classe</description>
<lien>http://www.siteclasse.com/</lien>
<lien>
<lessites>

On note que 'lessites => lien' doit être forcé avec ForceArray, mais
cela n'est pas le cas de 'lessites => lien => lien'.

Peite précision, je ne peux pas changer la définition du Schema XML.

Quelqu'un aurait une petite idée?

Merci par avance


Pierre Pintaric
http://www.genuts.com/

4 réponses

Avatar
Denis -esp2008-
Bonsoir Pierre,

Juste pour être sûr, il manque des '/' dans les balises fermantes ou
c'est le schéma utilisé qui veut cela ?

--
Denis
Avatar
Pierre Pintaric
Effectivement, il manque quelque /
Mais je l'ai écrit en live pour illustrer la question.

Voici le flux corrigé:

<lessites>
<titre>La liste des sites</titre>
<lien>
<description>Le plus beau site du monde</description>
<lien>http://www.monsite.com/</lien>
</lien>
<lien>
<description>Le plus moche site de la Terre</description>
<lien>http://www.mochesite.com/</lien>
</lien>
<lien>
<description>Le site classe</description>
<lien>http://www.siteclasse.com/</lien>
</lien>
</lessites>

On Tue, 31 May 2005 17:29:06 +0200, Denis -esp2008-
wrote:

Bonsoir Pierre,

Juste pour être sûr, il manque des '/' dans les balises fermantes ou
c'est le schéma utilisé qui veut cela ?


Pierre Pintaric
http://www.genuts.com/

Avatar
Michel Rodriguez
Pierre Pintaric wrote:

Mais il y a un truc que je voudrai faire, c'est de pouvoir forcer
certains éléments en tableau. Pour cela cool, il y a ForceArray[name].

Ca marche aussi bien sauf dans un cas particulier:

J'ai un élément 'lien' qui se retrouve dans plusier type sans avoir la
même définition. Pour certains, l'élément est optionnel, pour
d'autres, il peut se répéter plusieurs fois.

Un exemple:

<lessites>
<titre>La liste des sites</titre>
<lien>
<description>Le plus beau site du monde</description>
<lien>http://www.monsite.com/</lien>
<lien>
[...]
<lessites>

On note que 'lessites => lien' doit être forcé avec ForceArray, mais
cela n'est pas le cas de 'lessites => lien => lien'.

Peite précision, je ne peux pas changer la définition du Schema XML.


Ton schema ne me semble vraiment pas optimal, 'lien' est utilise dans 2
sens assez different. Mais bon, des fois on fait avec ce qu'on a...

La solution, il me semble, ca serait de te rammener a un cas plus
simple, ou les 2 types de liens seraient differencies. Le XML d'origine
est peut etre pas terrible, mais ca ne t'empeche pas de l'ameliorer un
peu pour pouvoir mieux travailler avec, quitte a le re-degrader en fin
de traitement.

Un petit filtre prealable, avec XML::Parser, XSLT, ou un truc comme ca,
ou tu change les 'lien' fils de 'lessites' en 'site' par example.

Et bien sur tu peut faire ca directement avec XML::Twig, en
retravaillant to arbre pour changer les 'liens', puis en utilisant la
methode 'simplify' qui te renvoie la meme structure que XML::Simple.

--
mirod

Avatar
Pierre Pintaric
OK, merci, c'est une bonne idée, je vais l'essayer de ce pas.

Pierre

On Wed, 01 Jun 2005 07:28:26 +0200, Michel Rodriguez
wrote:

Pierre Pintaric wrote:

Mais il y a un truc que je voudrai faire, c'est de pouvoir forcer
certains éléments en tableau. Pour cela cool, il y a ForceArray[name].

Ca marche aussi bien sauf dans un cas particulier:

J'ai un élément 'lien' qui se retrouve dans plusier type sans avoir la
même définition. Pour certains, l'élément est optionnel, pour
d'autres, il peut se répéter plusieurs fois.

Un exemple:

<lessites>
<titre>La liste des sites</titre>
<lien>
<description>Le plus beau site du monde</description>
<lien>http://www.monsite.com/</lien>
<lien>
[...]
<lessites>

On note que 'lessites => lien' doit être forcé avec ForceArray, mais
cela n'est pas le cas de 'lessites => lien => lien'.

Peite précision, je ne peux pas changer la définition du Schema XML.


Ton schema ne me semble vraiment pas optimal, 'lien' est utilise dans 2
sens assez different. Mais bon, des fois on fait avec ce qu'on a...

La solution, il me semble, ca serait de te rammener a un cas plus
simple, ou les 2 types de liens seraient differencies. Le XML d'origine
est peut etre pas terrible, mais ca ne t'empeche pas de l'ameliorer un
peu pour pouvoir mieux travailler avec, quitte a le re-degrader en fin
de traitement.

Un petit filtre prealable, avec XML::Parser, XSLT, ou un truc comme ca,
ou tu change les 'lien' fils de 'lessites' en 'site' par example.

Et bien sur tu peut faire ca directement avec XML::Twig, en
retravaillant to arbre pour changer les 'liens', puis en utilisant la
methode 'simplify' qui te renvoie la meme structure que XML::Simple.


Pierre Pintaric
http://www.genuts.com/