une question parse
drikc15-Sep-2008/11:51:06+2:00
J'aimerais trouver une solution pour parser une chaine du genre :
<pre>
s: {
   <section>
      <name>john mccain</name>
   </section>
      <name>barack obama</name>
      <feature>black skin</feature>
   <section>
}
</pre>

Donc, le but c'est de récupérer chaque paramètre de chaque section.
On voit que la balise <feature> représente un paramètre qui peut être présente ou pas.

Donc ma solution pour ce genre de chose c'est
<pre>
parse/all s [
   any [thru <section> copy sec to </section>
      (
         parse/all sec [
            thru <name> copy n to </name> (print n)
            0 1 [thru <feature> copy f to </feature> (print f)]
         ]
      )
   ]
]
</pre>

Mais je me demande s'il y a pas une solution sympa pour cela sans faire un appel à parse dans une règle.
drikc15-Sep-2008/11:53:22+2:00
ah juste les tags "<pre>" sont à ignorer ici, c'était pour le listing du code!

C'est quoi balise pour entourer du code?

cedric
Didec15-Sep-2008/14:53:24+2:00
Il y a un bouton "Help" dans le forum pour connaitre les balises utilisables !!!
Didec15-Sep-2008/15:06:41+2:00
Peut être simplement :
s: {
   <section>
      <name>john mccain</name>
   <section>
   </section>
      <name>barack obama</name>
      <feature>black skin</feature>
   <section>
}

parse/all s [
   any [
   	thru <section>
	any [
            thru <name> copy n to </name> (print n) | thru <feature> copy f to </feature> (print f)
        ]
   	to </section>
   ]
]
drikc15-Sep-2008/18:37:40+2:00
Ah ben oui, simplement.

Un détail c'est que s'il manque le balise <name> il y aura qd-même affichage du contenu de la balise <feature>.

Si je suis plus précis en disant que la balise <name> n'est pas optionnel et les balises <feature> suivent la balise <name> s'il y en a.

ps: j'avais mal écrit mais le contenu de s ds mon précédent message, voilà corrigé:
s: {
	<section>
		<name>john mccain</name>
	</section>
	<section> 
		<name>barack obama</name>
		<feature>black skin</feature>
	</section>
}
Didec15-Sep-2008/18:47:58+2:00
Il faut, je pense, remplacer le "|" dans la règle name/feature par un "any [" avec la règle <feature> dedans. Cela permet plusieurs <feature> au cas où :
parse/all s [
   any [
   	thru <section>
	any[
            thru <name> copy n to </name> (print n) any [thru <feature> copy f to </feature> (print f)]
        ]
   	to </section>
   ]
]
drikc15-Sep-2008/19:05:18+2:00
Oui mais dans ce cas ce "any" qui parse les tags <feature> va le faire pour tous ceux qu'il trouve y compris ceux qui sont pas ds la section courante.
En faites cela va afficher le contenu du 1er tag <name> seulement et ensuite celui de tous les tags <feature> s'il y en a.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2