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 :

[SimpleXML] comment faire une requête basée sur un namespace d'un attribut ?


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 952
    Par défaut [SimpleXML] comment faire une requête basée sur un namespace d'un attribut ?
    bonjours, en simplifié, j'ai le xml suivant :

    Code XML : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <Transaction  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TransactionResponseType">
     
    		<Segment xsi:type="SegmentProductType">
    			<Code Role="Product" Value="TOTO" />
    		</Segment>
    		<Segment xsi:type="SegmentStayType">
    			<Ats>
    				<At>
    					<Code Value="C1" />
    				</At>	
    			</Ats>
    			<MealPlan>
    				<Code Value="dp" />
    			</MealPlan>
    		</Segment>
    </Transaction>

    Mon pb est le suivant, je voudrait ne recupérer par xPath, que les noeud possedants l'attribut : xsi:type="SegmentStayType" (par exemple), et j'avoue que je n'y arrive pas du tout :'(

    quelqu'un aurait il une solution ou un lien vers quelquechose de comprehesible, car, je n'ai rien trouvé concernant des requetes xpath avec en param un namespace pour un attribut... :'(

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Et qu'avez-vous tenté ?

    Ceci semble fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $sxml = simplexml_load_file('fichier.xml');
    $res = $sxml->xpath('//*[@xsi:type = "SegmentStayType"]');
     
    header('Content-type: text/plain');
    foreach ($res as $n) {
        #var_dump($n);
        echo $n;
    }

  3. #3
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 952
    Par défaut
    merci beaucoup de ta reponse qui ofnctionne parfaitement, cependant,(et j'ai peur de passer pour un boulet ), je n'arrive pas a la faire marcher en cas concret...

    voici a partir d'ou ca ne passe plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $xml = simplexml_load_file('./exemple xml_1.xml');
    $portion = $xml->xpath('//Segment[@xsi:type = "SegmentStayType"]');
     
    //header('Content-type: text/plain');
    var_dump($portion);
    foreach ((array)$res as $n) {
     
        echo $n;
    }
    => je ne me voit retourné aucuns resultats :'(

    je ne suis pas un expert d'xpath, mais il me semble utiliser une syntaxe correcte

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Si on reprend votre exemple, il y aura (et a) une correspondance. Or l'élément correspondant ne comporte aucun noeud texte enfant hormis ceux qui sont constitués de blancs (espaces et sauts de ligne) - qui peuvent éventuellement être ignorés selon les options employées.

  5. #5
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 952
    Par défaut
    autant pour moi, ca marche, c'est juste que le xml a ete modifié, la balise mere est comme suit, dorenavant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Transaction xmlns="http://www.av2s.com/xft" Version="1.1" xsi:type="TransactionResponseType" TimeStamp="2007-03-28T11:45:32.435" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.av2s.com/xft ./xft_transaction.xsd">
    et du coup je sait aps trop pourquoi ca ne marche plus ^^ :'(

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    On en a parlé pas plus tard qu'aujourd'hui (c'est la fin le plus intéressant) : http://www.developpez.net/forums/sho...d.php?t=399135. Certes le sujet concernait DOM mais c'est tout aussi valable pour SimpleXML (méthode registerXPathNamespace entre autres).

  7. #7
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 952
    Par défaut
    merci enormement de tes reponses

    juste pour etre sur :
    le fait d'avoir dorenavant la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    fait que toutes mes balises sont prefixées de l'espace de nom : "xsi"?

    ps : je ne voit pas bien le rapport avec le topic en lien?

    je testerait ca demain

    edit : ca devait etre ce topic la, et oki, j'ai compris, merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 10/07/2011, 17h49
  2. [SOAP] Comment faire une requête sur un type concret ?
    Par verbose dans le forum Services Web
    Réponses: 1
    Dernier message: 17/06/2010, 13h57
  3. Comment faire une requête sur un intervalle
    Par niamo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2010, 10h49
  4. Réponses: 6
    Dernier message: 14/11/2008, 19h48
  5. [BDE] Comment faire une requête sur 2 Ttables ?
    Par dim07 dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/12/2006, 12h15

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