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

XSL/XSLT/XPATH XML Discussion :

Récupérer la valeur par l'attribut [XPATH 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut Récupérer la valeur par l'attribut
    Bonjour à tous,

    Je suis plus que débutant en ce qui concerne l'utilisation d'XPATH en php et malgré la lecture de ce très bon tuto en lien sur ce forum je suis perplexe .

    Mon fichier XML :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <OIS>
    <OI xmlns:tif="http://www.tourinfrance.net/Tourinfrance3/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ms="http://microsoft.com/wsdl/types/" xmlns:cs="http://www.enjoyconstellation.com" xmlns:utils="dms-utils" xmlns:media="media-utils">
    <tif:Contacts>
    	<tif:DetailContact type="04.03.13" xml:lang="fr" libelle="Etab/Lieu/Structure">
    		<tif:Adresses>
    		<tif:DetailAdresse>
    			<tif:Personnes>
    				<tif:MoyensCommunications>
    					<tif:DetailMoyenCom type="04.02.50" xml:lang="fr" libelle="Téléphone mobile">
    						<tif:Coord>04 00 00 00 00</tif:Coord>
    						<tif:ObservationDetailMoyenCom />
    					</tif:DetailMoyenCom>
    					<tif:DetailMoyenCom type="04.02.01" xml:lang="fr" libelle="Téléphone">
    						<tif:Coord>05 00 00 00 00</tif:Coord>
    						<tif:ObservationDetailMoyenCom />
    					</tif:DetailMoyenCom>
    				</tif:MoyensCommunications>
    			</tif:Personnes>
    		</tif:DetailAdresse>
    		</tif:Adresses>
    	</tif:DetailContact>
    </tif:Contacts>
    </OI>
    </OIS>
    Et mon bout de code php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $fichier = file_get_contents('locatif.xml');
    $xml = new SimpleXMLElement($fichier);
     
    $xml->registerXPathNamespace('c', 'http://www.tourinfrance.net/Tourinfrance3/');
     
    $Coord = $xml->xpath('//c:DetailMoyenCom[@libelle=\'Téléphone\']/Coord');
    	echo $Coord[0] . "\n";

    Comme vous l'aurez compris, le but est de récupérer la valeur '05 00 00 00 00', mais RIEN !! Bouhouuuuuuuu houuuuuuu

    Bien à vous !

  2. #2
    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
    Vous êtes là, juste manquant un tout petit détail.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //$Coord = $xml->xpath('//c:DetailMoyenCom[@libelle=\'Téléphone\']/Coord');
    $Coord = $xml->xpath('//c:DetailMoyenCom[@libelle=\'Téléphone\']/c:Coord');

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    Pétard de pétard !! Vous enjolivez mon week-end !!!

    Thank you so much !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    Question subsidiaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <tif:Tarifs>
    	<tif:DetailTarifs>
    		<tif:DetailTarif racine="CSTH" type="13.04.04.06" libelle="Semaine (meublé)" xml:lang="fr">
    			<tif:Nom>Tarif 2013 Semaine (meublé)</tif:Nom>
    			<tif:TarifMin>600.00</tif:TarifMin>
    			<tif:TarifMax>750.00</tif:TarifMax>
    		</tif:DetailTarif>
    	</tif:DetailTarifs>
    </tif:Tarifs>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $tarif_hs =  $xml->xpath('//c:Tarifs//c:DetailTarif/[@type=\'13.04.04.06\']//c:TarifMin');

    Je cherche à récupérer la valeur 600.00 mais je n'ai pas le bon code on dirait

    Trouvé !!

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $tarif_hs =  $xml->xpath('//c:Tarifs//c:DetailTarif[@type=\'13.04.04.06\']//c:TarifMin');

    Juste enlevé le slash entre DetailTarifet [@...] !
    Merci !

  5. #5
    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
    C'est bien cela!

    Juste une petite remarque: quand on utilise xpath, pensez à utilser l'axis double slash (//) judicieusement, surtout de ne pas l'abuser. Parfois c'est commode; mais souvent c'est critiquable.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    Alors dernier cas, on passe le level au-dessus !

    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
    <location>
    <tif:OffresPrestations>
    	<tif:DetailPrestation>
    		<tif:Prestation type="15.03.01" xml:lang="fr">Accès Internet</tif:Prestation>
    	</tif:DetailPrestation>
    </tif:OffresPrestations>
    </location>
    <location>
    <tif:OffresPrestations>
    	<tif:DetailPrestation>
    		<tif:Prestation type="15.03.01" xml:lang="fr">Accès Internet</tif:Prestation>
    		<tif:Prestation type="15.03.502" xml:lang="fr">WIFI</tif:Prestation>
    	</tif:DetailPrestation>
    </tif:OffresPrestations>
    </location>
    Le but ici est de savoir si il y a du wifi dans chaque location.
    En l’occurrence dans la première <location> il y a internet mais pas en wifi.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $id = $xml->xpath('//d:OffresPrestations');
    $i = "1"
    foreach ($id as $id) {
    $wifi = $xml->xpath('location[$i]//c:OffresPrestations//c:Prestation[@type=\'15.03.502\']');
    if (!empty($wifi)) { $wifi = "o"; } else { $wifi = "n"; }
    }
    $i++;

    Je boucle sur le chaque location et je fouine à chaque boucle si la valeur "type = 15.03.502" existe ou non... si non elle renvoie un tableau vide que je check avec "empty".

    Je pense que j'ai tout faux !! Je pense que 'empty' est une idée de merde !!
    C’était plus facile quand j'avais qu'un seul nœud location !

    Merci en tout cas

  7. #7
    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
    La pièce de code php montré semble insolite et déconcertant à lire. En tout cas, je me restreins à commenter ces deux lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $wifi = $xml->xpath('location[$i]//c:OffresPrestations//c:Prestation[@type=\'15.03.502\']');
    if (!empty($wifi)) { $wifi = "o"; } else { $wifi = "n"; }
    En php, si vous voulez extrapoler une variable comme $i dans un texte, ce texte doit être délimité par les guillemets signe double, non?! Et puis, la retourne de xpath évalué est un array. Donc, il semble plus logique de controller la retourne par une simple fonction count()...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $wifi = $xml->xpath("location[$i]//c:OffresPrestations//c:Prestation[@type='15.03.502']");
    if (count($wifi)!=0) { $wifi_status = "o"; } else { $wifi_status = "n"; }
    Initier une variable ne semble pas coûter trop cher, pourquoi vous reutilisez la même variable dans différente contexte tous les temps? peut-être pour une raison, mais quelle?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    Merci tsuji !

    Effectivement, mon code peut prêter à sourire !!!
    Je bidouille sans jamais avoir pris de cours sur le PHP... il faudra un jour que je me décide à acheter un Eyrolles là dessus. Je suis plus dans l'intégration XHTML et CSS pour dire vrai même si je prends plus mon pieds sur le dev !

    Donc c'est tout bon, mon week end est sauvé !

    Par ailleurs j'utilise les ' pour éviter de mettre des slashs avant les ".
    Je sinon il faudrait coller des addslashes() partout non ?

    Ah oui et concernant la même variable répété c'est par facilité, j'ai jamais d'inspiration pour trouver des synonymes ! Au final cette variable est entrée en base de données dont l'entrée est aussi "wifi".

    Encore merci

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

Discussions similaires

  1. Récupérer la valeur d'un attribut d'une balise séléctionnée par Spinner
    Par kamclasse dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 16/12/2014, 13h14
  2. Réponses: 4
    Dernier message: 13/02/2007, 17h40
  3. Réponses: 2
    Dernier message: 24/01/2007, 15h05
  4. Trigger : Récupérer la valeur par défaut d'une colonne
    Par mcspr2002 dans le forum Administration
    Réponses: 5
    Dernier message: 12/01/2007, 13h53

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