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 04/03/2011, 14h50   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2009
Messages : 146
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 146
Points : 13
Points : 13
Par défaut Modifier la valeur d'un noeud

Bonjour,
J'imagine que c'est la chose la plus simple à faire en DOM, mais impossible de trouver sur Google.

J'ai un fichier XML, comme ceci :

Code :
1
2
3
4
<settings>
  <abc>1</abc>
  <def>2</def>
</settings>
J'aimerais remplacer la valeur de abc (1) par 2 et celle de def (2) par 3, pour faire comme ceci :

Code :
1
2
3
4
<settings>
  <abc>2</abc>
  <def>3</def>
</settings>
J'ai déjà fait un petit bout de code, mais j'ai des erreurs... :
Code :
1
2
3
4
5
$dom = new DomDocument();
$dom->load($Fichier);
$node = $dom->getElementsByTagName('abc');
$node ->setAttribute("abc", "2");
$dom->save($Fichier);
Merci de m'aider !
ApocKalipsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 15h03   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Hello

DOMDocument::getElementsByTagName renvoie un DOMNodeList et pas un DOMElement, il faut donc traverser la liste pour changer les values des nodes:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
$xml = <<<XML
<?xml version="1.0"?>
<test>
	<abc>Say Hello To Peter</abc>
	<def>No I won't</def>
</test>
XML;
 
$dom = new DomDocument();
$dom->loadXML($xml);
$nodelist = $dom->getElementsByTagName('abc');
foreach ($nodelist as $node) {
	$node->nodeValue = "2";
}
 
echo $dom->saveXML();
et voilà
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 15h09   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2009
Messages : 146
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 146
Points : 13
Points : 13
Ça marche niquel, je te remercie !
ApocKalipsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 15h26   #4
Candidat au titre de Membre du Club
 
Inscription : mai 2009
Messages : 146
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 146
Points : 13
Points : 13
Par contre, petite question, quand j'édite il y a au début ceci : <?xml version="1.0"?>
Comment l'enlever ?
Merci.
ApocKalipsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h05   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Tu ne l'enlèves pas. C'est nécéssaire pour que ton flux soit un XML valide.

Si c'est une portion de XML ou de XHMLT qui tu génères avec DOM, alors tu peux toujours faire
Code :
1
2
3
 
$stream = $dom->saveXML();
$stream = str_replace('<?xml version="1.0" ?>', '', $stream);
That would do the trick
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 16h08   #6
Candidat au titre de Membre du Club
 
Inscription : mai 2009
Messages : 146
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 146
Points : 13
Points : 13
Ca ne marche pas :

Citation:
Object of class DOMDocument could not be converted to string
ApocKalipsS est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/03/2011, 16h18   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
C'est le résultat de saveXML qu'il faut transformer, pas DOM.

En reprennant l'exemple précédent:
Code :
echo str_replace('<?xml version="1.0" ?>', '', $dom->saveXML());
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 16h37   #8
Candidat au titre de Membre du Club
 
Inscription : mai 2009
Messages : 146
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 146
Points : 13
Points : 13
Ca ne marche pas non plus, par contre j'utilise le XML dans un fichier et non dans une variable, cela change peut être qqchose ?

Code :
str_replace('<?xml version="1.0" ?>', '', $dom->save($Fichier));
ApocKalipsS est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/03/2011, 16h55   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Ah bah oui évidement

Lis donc la doc de DOMDocument, ça te fera pas de mal: http://php.net/manual/en/class.domdocument.php

Je te répète que si c'est un fichier .xml que tu écris, le nœud <?xml avant le nœud racine est indispensable !
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 17h17   #10
Candidat au titre de Membre du Club
 
Inscription : mai 2009
Messages : 146
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 146
Points : 13
Points : 13
Ok, merci, toute façon je ne pense pas que ce soit bien grave qu'il y est ça.
Merci à toi !
ApocKalipsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 17h26   #11
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Jettes un oeil par là c'est jamais perdu:
http://en.wikipedia.org/wiki/XML#XML_Schema

Citation:
XML Declaration
XML documents may begin by declaring some information about themselves, as in the following example.

<?xml version="1.0" encoding="UTF-8" ?>
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h53.


 
 
 
 
Partenaires

Hébergement Web