Je bloque sur un truc que tout le monde doit avoir déjà fait.
Je cherche à parser une chaîne, à capturer quelques morceaux, etc.
Je ne peux pas utiliser domDocument de php parce que j'invente des
balises HTML et mon imbrication ne plaira pas à loadXML non plus.
Ma chaine simplifiée :
$partialHtmlOutput =
'
<mbLoop name="variants">
<item>
[[variantsLabel]]=>[[variantsPriceFormat]]=>[[variantsId]]
<mbLoop name="productsInStock">
Lorem
</mbLoop>
</item>
</mbLoop>
<div>AAA</div>
<mbLoop>AA</mbLoop>
';
Je cherche à parser chaque balise <mbLoop>, à capturer la valeur de
son attribut name et son contenu.
Pour simplifier, je pars du principe qu'il ne peut y a voir qu'un seul
niveau d'imbrication.
J'arrive ici :
preg_match("/<mbLoop[^>]*>(.*?)(<mbLoop[^>]*>.*?<\/mbLoop>)+(.*?)<\/mbLoop>/s",
$partialHtmlOutput, $matches)
Ceci marche bien, mais j'aimerai ajouter le fait que l'imbrication
soit optionnelle. Mais ceci ne fonctionne plus (+ remplacé par ?) :
preg_match("/<mbLoop[^>]*>(.*?)(<mbLoop[^>]*>.*?<\/mbLoop>)?(.*?)<\/mbLoop>/s",
$partialHtmlOutput, $matches)
Au final je veux :
[] => 'variants',
[] => '<item>
[[variantsLabel]]=>[[variantsPriceFormat]]=>[[variantsId]]',
[] => '<mbLoop name="variantsInStock">....</mbLoop>', // Ou mieux,
l'imbrication parsée aussi...
[] => </item>
...
Si une bonne âme se sent de pointer du doigt l'endroit où je me fourvoie...
Merci et bonne chaude après midi.
--
Cyril Lopez - Nethik
Déjà tu te fourvoies là, à mon sens.
L'API DOM permet de traiter du XML quelconque, pas que du HTML "standard".
Les regexp ne sont pas la bonne techno pour traiter un arbre XML.
Désolé :-)
--
Julien
Edouard Seynaeveweb development |
||||||||
edo...@wepika.com | (+32)498.17.73.19 | @seynaeve | ||||||
Café Numérique - promoter | @cafenumerique | |||||||
wepika.com 22 avenue des Métallurgistes, 1490 Court-Saint-Etienne, Belgium | @wepika |
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Professionnels francophones du développement web.
Pour envoyer un message à ce groupe, adressez un e-mail à webd...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse webdevfr+u...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/webdevfr?hl=fr
Oui c'est pour cela que j'ai testé la méthode loadXML de domDocument.
Mais ma chaine n'est pas un XML correct.
Ex:
<loopHead>
<select name="lorem">
</loopHead>
<loopFoot>
</select>
</loopFoot>
Merci Edouard pour lien. Je m'étais mis de côté ce parser si je
n'arrivais à rien d'autre.
Cyril, Nethik
En effet;
dans un XML valide tu devrais mettre un CDATA.
(et à mon avis tu devrais le faire, mais ce n'est que ça : mon avis :-) )
--
Julien
Merci pour ton avis et de ta participation, ça me fait avancer dans ma
réflexion.
Bonne journée !
Cyril, Nethik