Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2007, 23h09   #1
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Par défaut [DOM] Modifications de noeuds

Salut,

voici la structure de mon fichier XML

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<mysql>
  <database name="personnes">
    <table>
        <fiche>
          <var name="id">..</var>
          <var name="nom">...</var>
          <var name="prenom">...</var>
          <var name="statut">...</var>
          <var name="formation">...</var>
          <var name="pageWebPerso" generation="auto"></var>
          <var name="photo"></var>
          <var name="distinctions" generation="none"></var>
          <var name="implicationprojet"><projet>projet1</projet><projet>projet2</projet></var>
          <var name="tel"></var>
          <var name="local"></var>
          <var name="courriel"></var>
          <var name="implicationlabo">5059<laboratoire>..</laboratoire></var>
        </fiche>
    </table>
  </database>
</mysql>
mon problémes c'est comment modifier les données dans les balises <projet></projet> sachant que le nombre de ces balises dans le champs <implicationprojet> peut augmenter ou diminuer! et meme chose pour <implicationlabo> , c'est le meme concept.

et aussi comment modifier le champs generation !!!

voici le code que j'ai, je vais l'expliquer un peu

Code :
1
2
3
4
5
6
7
8
9
10
function getFicheById($dom, $id)
{
    $xpath = new DOMXPath($dom);
    $res = $xpath->query(sprintf('//fiche[var[@name = "id"]/text() = "%d"]', $id));
    if ($res->length == 1) {
        return $res->item(0);
    } else {
        return FALSE;
    }
}
ca retourne la fiche courante , à partir du id, c'est à dire la fiche a modifier

Code :
1
2
3
4
5
6
7
8
9
10
function ficheToNodeArray($fiche)
{
    $vars = array();
    foreach ($fiche->firstChild->childNodes as $v) {
        if ($v->tagName == 'var' && $v->hasAttribute('name')) {
            $vars[utf8_decode($v->getAttribute('name'))] = $v;
        }
    }
    return $vars;
}
permet la modification des valeurs avec cette facon :

Code :
1
2
3
4
5
6
7
8
9
$noeuds = ficheToNodeArray($fiche, $_POST['id']);
	$noeuds['nom']->nodeValue = utf8_encode($_POST['nom']);
	$noeuds['prenom']->nodeValue = utf8_encode($_POST['prenom']);
	$noeuds['statut']->nodeValue = utf8_encode($_POST['statut']);
	$noeuds['formation']->nodeValue = utf8_encode($_POST['formation']);
	$noeuds['pageWebPerso']->nodeValue = utf8_encode($_POST['pageWebPerso']);
	$noeuds['tel']->nodeValue = utf8_encode($_POST['tel']);
	$noeuds['photo']->nodeValue = utf8_encode($_POST['photo']);
	$noeuds['distinctions']->nodeValue = utf8_encode($_POST['distinctions']);


finalement, j'ai les valeurs des projets, et des laboratoires dans des array

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$proj=array();
	$i=0;
	if(isset($_POST['implicationprojet']))
	{
		foreach ($_POST['implicationprojet'] as $v) {
		   if ($v){
			 $proj[$i]=$v;
			 $i++;
		   }
		 }
	}
	$labs=array();
	$i=0;
	if(isset($_POST['implicationlabo']))
	{
		foreach ($_POST['implicationlabo'] as $v) {
		   if ($v){
			 $proj[$i]=$v;
			 $i++;
		   }
		 }
	}
toutes les données proviennent d'un formulaire ...


Merci.



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2007, 22h40   #2
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
bon ça l'air compliqué

ok alors je reduit le probleme,

par exemple ici :

Code :
<var name="pageWebPerso" generation="auto"></var>

comment je pourrais obtenir la valeur de generation ? c'est à dire une fonction qui me retournera la valeur "auto"

et comment je pourrais modifier la valeur de generation ??

si ce probléme est reglé je pourrai faire la modification sans problémes je pense

merci!



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2007, 23h33   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
generation étant un attribut et si vous savez à quel élément il se situe vous pouvez vous basez sur la fonction ficheToNodeArray plus haut. Exemple :
Code :
1
2
$noeuds = ficheToNodeArray($fiche, $_POST['id']);
$noeuds['pageWebPerso']->setAttribute('generation', utf8_encode('ma_nouvelle_valeur')); // ça le crée ou modifie sa valeur s'il existe déjà
Pour implicationlabo/implicationprojet, je n'ai pas compris ce que vous vouliez exactement faire.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 02h27   #4
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Citation:
Envoyé par julp Voir le message
generation étant un attribut et si vous savez à quel élément il se situe vous pouvez vous basez sur la fonction ficheToNodeArray plus haut. Exemple :
Code :
1
2
$noeuds = ficheToNodeArray($fiche, $_POST['id']);
$noeuds['pageWebPerso']->setAttribute('generation', utf8_encode('ma_nouvelle_valeur')); // ça le crée ou modifie sa valeur s'il existe déjà
Pour implicationlabo/implicationprojet, je n'ai pas compris ce que vous vouliez exactement faire.
merci pour commencer,

pour implicationprojet et implicationlabo ..

prenons implicationprojet pour exemple, j'ai le tableau $proj qui contient les projets, ce que je veux, c'est mettre a jour la balise <implicationprojet> pour qu'elle ait les valeurs contenus dans ce tableau

c'est à dire avoir ca:

<implicationprojet> <projet>p1</projet> <projet>p2</projet> <projet>p3</projet> </implicationprojet>


p1,p2,p3 qui proviennent du tableau $proj

j'espere que c'est clair maintenant


merci



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 11h16   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Oki, je voyais pas à quoi servait le code que vous donnez (une copie, inutilisée, du tableau) ...
Code :
1
2
3
4
5
6
7
8
9
$noeuds = ficheToNodeArray($fiche, $_POST['id']);
if(isset($_POST['implicationprojet'])) {
    foreach ($noeuds['implicationprojet']->childNodes as $child) {
        $child->parentNode->removeChild($child);
    }
    foreach ($_POST['implicationprojet'] as $v) {
        $noeuds['implicationprojet']->appendChild($noeuds['implicationprojet']->ownerDocument->createElement('projet', $v));
    }
}
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 21h40   #6
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Citation:
Envoyé par julp Voir le message
Oki, je voyais pas à quoi servait le code que vous donnez (une copie, inutilisée, du tableau) ...
Code :
1
2
3
4
5
6
7
8
9
$noeuds = ficheToNodeArray($fiche, $_POST['id']);
if(isset($_POST['implicationprojet'])) {
    foreach ($noeuds['implicationprojet']->childNodes as $child) {
        $child->parentNode->removeChild($child);
    }
    foreach ($_POST['implicationprojet'] as $v) {
        $noeuds['implicationprojet']->appendChild($fiche->ownerDocument->createElement('projet', $v));
    }
}
oui avec la petite correction que j'ai ajouté au quote


Merci infiniment!


...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h35.


 
 
 
 
Partenaires

Hébergement Web