IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[DOM] Modifier le contenu d'un noeud complet


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut [DOM] Modifier le contenu d'un noeud complet
    Bonjour,
    Ma question va certainement paraitre plus qu'idiote (peut etre pas uniquement paraitre, d'ailleurs) mais je suis un peu bloquee.

    J'ai un html contenant ce type de donnees

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <div class="dataParent">
    	<span class="data"><span class="attribute">attributeDescription</span> <strong> 1 </strong></span>
    	<span class="data"><span class="attribute">attributeType</span> <strong>HTDF(Pieces)</strong></span>
    	<span class="data"><span class="attribute">attributeDescription</span> <strong> 15 </strong></span>
    	<span class="data"><span class="attribute">attributeType</span> <strong>JUTH(Weight)</strong></span>
    	<span class="data"><span class="attribute">attributeDescription</span> <strong> FILON </strong></span>
    	<span class="data"><span class="attribute">attributeType</span> <strong>RCSF(First Name)</strong></span>
    	<span class="data"><span class="attribute">attributeDescription</span> <strong> GERARD </strong></span>
    	<span class="data"><span class="attribute">attributeType</span> <strong>THYF(Surname)</strong></span>
    	<span class="data"><span class="attribute">attributeValue</span> <strong>4578</strong></span>
    	<span class="data"><span class="attribute">attributeDescription</span> <strong> kg </strong></span>
    	<span class="data"><span class="attribute">attributeType</span> <strong>UNIT(Unit)</strong></span>
    </div>
    que j'aimerais mettre dans un tableau comme ceci

    attributeDescription | attributeType | attributeValue
    1 HTDF(Pieces)
    15 JUTH(Weight)
    FILON RCSF(First Name)
    GERARD THYF(Surname) 4578
    kg UNIT(Unit).


    je sais que le mieux est sans doute XSLT mais je me sens bien plus 'a l'aise en PHP et avec DOM et je n'ai pas tres envie d'ajouter une technologie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    $xpath = new DOMXpath($dom_second_step);
    $divElements = $xpath->query('//*/div');
     
    if (!is_null($divElements)) {
      foreach ($divElements as $divElement) {
     
    	$spanData=$divElement->firstChild;
    	$spanDatas = $divElement->childNodes;
    	$flagJustDatas=true;
    	foreach ($spanDatas as $spanData) {
    		if ($spanData->nodeName!="span") {$flagJustDatas=false;};
    	}
    	if ($flagJustDatas==true){
    		if (case_table($divElement)!=""){
    			$newElement=case_table($divElement); //newElement is a string
    			$displayNode=new DOMDocument;
    			$displayNode->preserveWhiteSpace = false; 
    			$displayNode->formatOutput = true; 
    			$displayNode->loadXml($newElement);
    			$newNode = $displayNode->importNode($divElement->parentNode, true);
    			$divElement->parentNode->replaceChild($newNode, $divElement); //ligne 262: la ligne de l'erreur	
     
     
    			//$displayNode=$displayNode->getElementsByTagName("span")->item(0);
    		}
    	}
      }
    }
    //echo htmlentities($dom_second_step->saveXML());
     
    echo $dom_second_step->saveXML();
    case_table($divElement) me renvoie, pour chaque noeud $divElement donc, le tableau associe, sous forme de string, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <span class="modifiedData">
    	<table>
    	<tr>
    		<th>attributeDescription:</th>
    		<th>attributeType: </th>
    	</tr>
    	<tr>
    		<td> 1 </td>
    		<td> YUIBK</td>
    	</tr>
    	<tr>
    		<td> 15 </td>
    		<td> RGJK</td>
    	</tr>
    	<tr>
    		<td> GERARD </td>
    		<td> GHT(First Name)</td>
    	</tr>
    	<tr>
    		<td> FILON </td>
    		<td> THG(Surname)</td>
    	</tr>
    	<tr>
    		<td> kg </td>
    		<td> UNIT(Unit)</td>
    	</tr>
    	</table>
    </span>.
    et voici le message d'erreur qui s'affiche:

    Fatal error: Uncaught exception 'DOMException' with message 'Wrong Document Error' in mainFile.php:262 Stack trace: #0 mainFile.php(262): DOMNode->replaceChild(Object(DOMElement), Object(DOMElement)) #1 mainFile.php(396): main_parsage_message() #2 {main} thrown in mainFile.php on line 262
    J'aimerais afficher le resultat du parsage, avec les tableaux remplacant les span, la fonction case_table qui pour un noeud renvoie le string retourne fonctionne bien, mais je n'arrive pas 'a remplacer le vieux noeud par ce nouveau.
    J'espere avoir ete la plus claire possible.

    Merci beaucoup d'avance 'a celui qui voudra bien se plonger dans mon code!

  2. #2
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    si quelqu'un passe par la, mon problème persiste! merci d'avance

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    d'abord pourquoi ne pas simplifier ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		if ($spanData->nodeName!="span") {$flagJustDatas=false;};
    	}
    	if ($flagJustDatas==true){
    bon par contre on sais ce que fait case_table() ?
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    case_table() est une fonction assez longue et pas tres triviale (plusieurs cas differents) donc je ne suis pas sure qu'il vaille la peine de la mettre. mais elle prend en parametre un noeud de valeur div: $divElement (type mon premier exemple <div class="dataParent"> contenu du noeud <\div>), elle transforme son contenu: les balises <span> en tableaux.
    Cette fonction renvoie un string de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <span class="modifiedData">
    	<table>
    	<tr>
    		<th>attributeDescription:</th>
    		<th>attributeType: </th>
    	</tr>
    	<tr>
    		<td> 1 </td>
    		<td> YUIBK</td>
    	</tr>
    	<tr>
    		<td> 15 </td>
    		<td> RGJK</td>
    	</tr>
    	<tr>
    		<td> GERARD </td>
    		<td> GHT(First Name)</td>
    	</tr>
    	<tr>
    		<td> FILON </td>
    		<td> THG(Surname)</td>
    	</tr>
    	<tr>
    		<td> kg </td>
    		<td> UNIT(Unit)</td>
    	</tr>
    	</table>
    </span>

    et j'aimerais remplacer le noeud $divElement par le noeud engendré par ce string. je sais bien que ce n'est pas très propre, j'ai essaye de plusieurs manières pour ne pas passer par des strings, mais ce n'est vraiment pas facile de placer des données en tableau...



    edit: voici le tableau du premier post
    attributeDescription | attributeType | attributeValue
    1__________________HTDF(Pieces)
    15_________________JUTH(Weight)
    FILON______________RCSF(First Name)
    GERARD____________THYF(Surname)_________4578
    kg_________________UNIT(Unit).

Discussions similaires

  1. [DOM] changer le contenu d'un noeud
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/08/2009, 13h47
  2. [DOM] Modifier le contenu d'un onChange
    Par Invité dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 19/02/2009, 16h10
  3. [SimpleXML] Modifier le contenu d'un noeud
    Par michael_MS dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 16/10/2008, 15h24
  4. [SimpleXML] Modifier le contenu d'un noeud
    Par Scalp4 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/10/2008, 14h59
  5. [DOM] Modifier le contenu complet d'une frame
    Par schnito dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/04/2008, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo