Problème d'analyse de noeud

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème d'analyse de noeud

par katagoto » 02 juil. 2008, 17:35

J'ai peut-être trouvé, étant donné que noeud est un DomDocument, je peux faire $noeud->attributes, j'ai regardé DOMNamedNodeMap et je penses qu'avec DOMNamedNodeMap::getNamedItem ou DOMNamedNodeMap::item (en le listant je peux recréer le noeud, par contre, je me nois un peu, some help please ? :idea:

par Sékiltoyai » 30 juin 2008, 17:19

Bah c'est déjà pas mal...

par katagoto » 30 juin 2008, 16:13

Oui, hors mis que c'est array_key_exists() pas de suggestion ? :lol:

par Sékiltoyai » 30 juin 2008, 16:11

Lit bien la doc de in_array() ...

Problème d'analyse de noeud

par katagoto » 30 juin 2008, 14:48

Bonjour à toutes et tous,

J'ai créé une fonction qui analyse un noeud et qui remplace ses balise par du PHP, pour un moteur de template, non Cyrano, me tape pas :lol: , mais je n'arrive pas à a faire en sorte que lorsque la balise ne soit pas dans mon tableau ça affiche le noeud tel quel, voilà ma fonction :
function parsage_normal($noeud, $contenu_a_inserer='')
{
	// Tableau des balises ouvrantes
	$balise_1 = array('if' => 'if($1){', 'else' => 'else {', 'elseif' => 'elseif($1){',
	'boucle' => '**$1**', '#text' => 'echo "', 'normal' => 'echo "$0');

	// Tableau des balises fermantes
	$balise_2 = array('if' => '}', 'else' => '}', 'elseif' => '}', 'boucle' => '**fin**', '#text' => '":',
	'normal' => '";'); 

	// Tableau des attributs
	$attributs = array('cond' => 'valeur', 'condition' => 'valeur', 'nom' => 'valeur');

	if(in_array($noeud->nodeName, $balise_1)) $nom = $noeud->nodeName; // On récupère le nom du noeud
	else $nom="normal";
	
	$nom_b=$noeud->nodeName;
	

	if(!empty($contenu_a_inserer)) // On détermine si on veut spécifier du contenu pré-parsé.
	{
		$contenu = $contenu_a_inserer; // Si c'est le cas, on met la variable de fonction en contenu
	}
	else
	{
		$contenu = $noeud->nodeValue; // Sinon, le contenu du noeud.
	}

	$premiere_balise = $balise_1[$nom];     // Première balise (ouvrante)

	if($noeud->hasAttributes()) // On remplace les attributs
	{

		$un = $noeud->attributes->getNamedItem($attributs[$nom])->nodeValue; // Récupération de la valeur de l'attribut
		$premiere_balise = str_replace("$1", $un, $premiere_balise); // On remplace la valeur $1 par celle de l'attribut

	}

	$intermediaire = $premiere_balise . $contenu . $balise_2[$nom]; // On assemble le tout

	if($nom == 'template')
	{
		$intermediaire = nl2br($intermediaire); // On saute des lignes au résultat final
	}

	return $intermediaire; // On renvoie le texte parsé.
}
J'aimerais, par exemple, que pou ce noeud :

Code : Tout sélectionner

<p class=\"page2\">Un texte qui sert à rien</p>
Que je puisse retourner ça :
echo "<p class=\"page2\">Un texte qui sert à rien</p>";
Quelqu'un à une idée ? Je sêche complètement :/

Par avance merci 8-)