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

Langage PHP Discussion :

php xml removeElement


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut php xml removeElement
    Bonjour,

    Je souhaiterais effacer des éléments d'un xml en particulier où SubDescUsageID possède la valeur usage_id 0x04:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ID=$sxpath->xpath($machaine);    //
     
    foreach($ID as $usId){
    if(strcmp(($usId->xpath('usage_id/@value')[0]),"0x04")==0){
    $usId->parentNode->removeChild($usId);
    }
    }


    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
     
    <SW >
                    <SubList>
                      <SubDescID>
                        <update_id value="###CARO_VERS###"/>
                      </SubDescID>
                      <SubDescUsageID>
                        <usage_id value="0x02"/>
                      </SubDescUsageID>
                      <SubDescUsageID>
                        <usage_id value="0x03"/>
                      </SubDescUsageID>
                      <SubDescUsageID>
                        <usage_id value="0x04"/>
                      </SubDescUsageID>
                    </SubList>
                  </SW>
    Merci d'avance de votre aide.

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 994
    Par défaut
    Comme tu pourras le constater en regardant le manuel PHP, la classe simpleXMLElement n'as pas de méthode removeChild (ni de méthode pour atteindre le parent d'un élément), mais un des intérêts de simpleXMLElement est que ses instances peuvent se manipuler en partie comme des tableaux. Or pour enlever un élément d'un tableau, on utilise unset, ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sxe = simplexml_load_string($xml);
     
    foreach ($sxe->xpath('//SubDescUsageID[./usage_id/@value="0x04"]') as $subD) {
        unset($subD[0]);
    }
    echo $sxe->asXML();
    Avec DOMDocument on aurait effectivement procéder ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $dom = DOMDocument::loadXML($xml);
    $xp =  new DOMXPath($dom);
    $toRemove = [];
     
    foreach ($xp->query('//SubDescUsageID[./usage_id/@value="0x04"]') as $node) {
        $toRemove[] = $node;
    }
     
    foreach ($toRemove as $node) {
        $node->parentNode->removeChild($node);
    }
     
    echo $dom->saveXML();

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Comment changer la valeur d'un attribut?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    SimpleXMLElement::attributes pour lire les attributs, et ensuite tu peux les manipuler directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $element->attributes()->attributeName = 'New value of the attribute';
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Mx>
          <Id taux="10" Gr=""/>
          <Id taux="2048" DFI="0x0258"/>
        </Mx>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if($sxpath->xpath('//Mx/Id[@taux="2048"]')[0]){
    $sxpath->xpath('//Mx/Id[@taux="2048"]')[0]->attributes()['taux'] = "4444";
    }
    ça ne marche pas.

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(($elements = $sxpath->xpath('//Mx/Id[@taux="2048"]')) !== false){
    	$element = $elements[0];
    	$element->attributes()->taux = "4444";
    }
    (et sinon, expliciter un peu "ça marche pas", ça pourrait être utile...)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    J'ai essayé votre bout de code, aucun effet, aucune modification du champ apportés.

  8. #8
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Le conditionnel serait verifié dans tous les cas parce que le retour serait un Array - trouver ou pas trouver d'élément, où dans le dernier cas, la ligne $element->attributes() serait erronée. Il vaut mieux d'écrire le conditionnel autrement qui peut faire proprement la distinction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //if(($elements = $sxpath->xpath('//Mx/Id[@taux="2048"]')) !== false){
    if(count($elements = $sxpath->xpath('//Mx/Id[@taux="2048"]')) != 0){

Discussions similaires

  1. communication mysql, php, xml, flash
    Par klams dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/03/2006, 19h12
  2. [PHP] <?xml version="1.0" encoding="UTF-16
    Par pierrot10 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/03/2006, 12h22
  3. [XML] Php -> XML / Utf-8
    Par gehan dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/02/2006, 11h30
  4. [PHP] XML et jpGraph
    Par icecube216 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 16/12/2005, 15h15
  5. [XSLT][DOM] Php - Xml - Xsl
    Par topolino dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 08/12/2005, 20h34

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