begin process at 2012 05 29 01:51:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

expression régulière cdata


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

expression régulière cdata

jeudi 21 janvier 2010 à 16:40:20 | expression régulière cdata

pcmanprogrammeur

bonjour à tous
j'ai besoin d'encadrer les informations d'un document XML par des CDATA. Pour l'instant, j'en suis là :
Code PHP :
	$xml = "<xml><test>id</test><test2>perso</test2><test3/></xml>";
 
	$xml = preg_replace("#(<[^/>]+>)#i", "$1<![CDATA[", $xml);
	$xml = preg_replace("#(</[^>]+>)#i", "]]>$1", $xml);
	
	echo "<xmp>".$xml."</xmp>";

Cela retourne :
<xml><![CDATA[<test><![CDATA[id]]></test><test2><![CDATA[perso]]></test2><test3/>]]></xml>
au lieu de :
<xml><test><![CDATA[id]]></test><test2><![CDATA[perso]]></test2><test3/></xml>
Le problème c'est que j'ai un CDATA qui se place sur la balise "<xml>" alors qu'il faut que ce soit uniquement sur les feuilles de mon arbre XML.
Avez-vous une idée?
Merci d'avance de votre réponse!
jeudi 21 janvier 2010 à 17:00:26 | Re : expression régulière cdata

pcmanprogrammeur

Bon, j'ai avancé car la solution partielle en une ligne semble être :
echo "<xmp>".preg_replace("#(<[^/>]+>)([^<>]+)(</[^>]+>)#i", "$1<![CDATA[$2]]>$3", $xml)."</xmp>";
Cependant si je change l'exemple en
$xml = "<xml><test>id</test><test2>prix > 10</test2><test3/></xml>";
le résultat retourné est :
<xml><test><![CDATA[id]]></test><test2>prix > 10</test2><test3/></xml>
au lieu de :
<xml><test><![CDATA[id]]></test><test2>><![CDATA[prix > 10]]></test2><test3/></xml>
au piste pour m'aider à terminer ce petit script?
merci d'avance !
vendredi 22 janvier 2010 à 04:00:54 | Re : expression régulière cdata

Arto_8000

Si ton xml garde une struture à 1 niveau seulement tu peux rajouter une condition dans ton regexp pour qu'il ignore ta balise "root" et le reste va bien fonctionner.

Code PHP :
<?php
$xml = "<xml><test>id</test><test2>perso</test2><test3/></xml>";
 
$xml = preg_replace("#(?!<xml>)(<[^/>]+>)(.*?)(</[^>]+>)#i", "$1<![CDATA[$2]]>$3", $xml);
	
echo "<xmp>".$xml."</xmp>";
?>
vendredi 22 janvier 2010 à 08:49:27 | Re : expression régulière cdata

pcmanprogrammeur

Salut!
Mon XML de sortie peut avoir plusieurs niveaux ... il faut donc que ce soit toutes les feuiles de mon arbre qui prennet un CDATA !
Une idée?
vendredi 22 janvier 2010 à 19:17:37 | Re : expression régulière cdata

Arto_8000

Hum, j'ai regardé ça un peu plus et ceci devrait faire l'affaire :

Code PHP :
<?php
$xml = "<xml><test>   <re>id</re></test><test2>prix > 10</test2><test3/></xml>";
 
$xml = preg_replace("#(<[^/>]+>)(?!\s*<.*?>)(.*?)(</[^>]+>)#i", "$1<![CDATA[$2]]>$3", $xml);
	
echo "<xmp>".$xml."</xmp>";
?>


En gros, j'ai rajouté une condition pour le contenu de la balise, si ça commence par une balise, la balise sera ignoré. D'ailleurs dans ce genre de situation c'est les "assertions" (j'ignore s'il existe un terme français pour ça) qui sont utilisés.
lundi 25 janvier 2010 à 10:43:22 | Re : expression régulière cdata

pcmanprogrammeur

Désolé de pas avoir répondu plus tôt, je bosse pas le WE ;)
En tout cas là, je dis bravo monsieur !!! C'est nickel :p
Ca mérite un "résolu" et un "GROS MERCI"!
lundi 25 janvier 2010 à 16:11:26 | Re : expression régulière cdata

pcmanprogrammeur

Je vais encore t'embêter ... Je crois que c'est le dernier défi car je n'ai plus que ça qui bloque apparemment :)

J'ai le cas suivant :

Code PHP :
<?php
$xml = "<xml><test>   <re>id</re></test><test2>< 10</test2><test3/></xml>";
 
$xml = preg_replace("#(<[^/>]+>)(?!\s*<.*?>)(.*?)(</[^>]+>)#i", "$1<![CDATA[$2]]>$3", $xml);
	
echo "<xmp>".$xml."</xmp>";
?>

Comme tu remarqueras le "< 10" n'est pas encadré par CDATA :( J'ai beau essayer de modifier l'expression j'y arrive pas :p J'ai vraiment besoin de tes talents !
Merci d'avance.
lundi 25 janvier 2010 à 20:51:52 | Re : expression régulière cdata

Arto_8000

Réponse acceptée !
Faudrait juste mieux définir les caractères permis dans les balises. Présentement il pense que ceci est une balise :

Code XML :
<xml><test>   <re>id</re></test><test2>[b]< 10</test2>[/b]<test3/></xml>


Sans tester je te dirait que rapidement ceci devrait faire l'affaire :

Code PHP :
<?php
$xml = "<xml><test>   <re>id</re></test><test2>< 10</test2><test3/></xml>";
 
$xml = preg_replace("#(<[^/>]+>)(?!\s*<[a-zA-Z0-9]+?>)(.*?)(</[^>]+>)#i", "$1<![CDATA[$2]]>$3", $xml);
	
echo "<xmp>".$xml."</xmp>";
?>
mardi 26 janvier 2010 à 09:21:48 | Re : expression régulière cdata

pcmanprogrammeur

Ca me semble pas mal tout ça :) Merci beaucoup !
Une petite dernière question pour ma culture perso! Est-il possible de faire que chose du style :
$xml = preg_replace("#(<[^/>]+>)(?!\s*<[a-zA-Z0-9]+?>)(.*?)$1#i", "$1<![CDATA[$2]]>$3", $xml);
pour utiliser le paramètre $1 dans l'expression a gauche!
mardi 26 janvier 2010 à 17:30:57 | Re : expression régulière cdata

Arto_8000

Non les variables $1, $2, etc. sont associées au résultat de la recherche. Tu ne peux pas les utilisés avant que la recherche soit faite.


Cette discussion est classée dans : code, xml, expression, régulière, cdata


Répondre à ce message

Sujets en rapport avec ce message

Expression régulière [ par xaviernuma ] Bonjour,Sur Internet j'ai trouvé il semblerai deux type de syntaxe pour les expressions régulière :[code]/^class=\"test\">(.*)$/[/code]et [code]#class Problème expression régulière [ par nounours21_6 ] Bonjour, J'ai un souci de construction d'expression régulière. J'ai un fichier XML et il faut que j'enlève l'en-tête grace à une ER.Voila le fichier Expression régulière balaise [ par rekam ] Bonjour! Je cherche depuis un moment un moyen de faire une expression régulière pour résoudre ce genre de cas: [code=php] du texte divers {une_strin expression régulière [ par mfaraday ] SalutUne fois de plus, je me prends la tête avec une expression régulière !Alors voila je voudrais remplacer dans un texte tout ce qui est de la forme modifier cdata dans un xml [ par marine34000 ] Salut :-) J'ai un problème pour modifier les cdata [code=xml] le test [/code] j'ai trouvé ce code: [code=php]<?php getattribute xml en php [ par jimmyhendrix ] Salut ! J'ai un problème tout simple. J'essaie d'aller chercher un attribut dans un fichier xml à l'aide du php. J'ai trouvé beaucoup de réponse sur Encodage accent en PHP %E9 [ par jimmyhendrix ] Salut, Je suis vraiment bloqué ! J'ai fait un code javascript qui créer une form paypal avec les donnés que le client a inscrit dans la page d'achat Demande d'aide pour une expression régulière [ par bluemandfr ] Bonjour à tous ! J'ai le code suivant : [code=php]$n = "\n"; echo ''.eregi_replace('[ \n]* '.$n.' '); echo ''.eregi_replace('[ \n]* ".$n." ");[/code XML/XSLT dynamique [ par JoJo738 ] Bonjour à tous ^^ Cela fait un bail que je ne suis pas venu sur le forum :p Alors un petit coucou à tout ceux que je connais ;) Sinon, je suis là po URGENT: Comment interprété des accents en XML dans le tag name [ par j3r3m067 ] Bonjour, j'ai un fichier xml dont le tag name est: [code=xml]Rien[/code] Mon problème est que dans mon php quand je fait: [code=php]$query[] = "/Hist


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales