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 :

Recup valeur tag après application filtre xpath


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 82
    Points : 43
    Points
    43
    Par défaut Recup valeur tag après application filtre xpath
    Bonjour, je cherche depuis plusieurs heures à récupérer le numéro de téléphone suivant:

    (simplexml)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tel = Resultats->Resultat->MoyensCommunications->DetailMoyenCom[0]->Coord;

    Pour cela, je dois filtrer en fonction du 'Type' ou 'Libellé' car plusieurs noeuds 'DetailMoyenCom' sont présents dans le flux et l'ordre n'est pas toujours le même

    J'ai donc utilisé xpath mais je ne trouve pas la bonne syntaxe permettant d'extraire le numéro de tel.

    Ci-dessous, la partie du flux concerné:

    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
     <?xml version="1.0" encoding="utf-8" ?> 
     <ListeResultat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://SitraWS/">
     <Resultats>
     <Resultat>
       <MoyensCommunications>
     <DetailMoyenCom>
      <Type>04.02.01</Type> 
      <Libelle>Téléphone</Libelle> 
      <Coord>04 XX XX XX XX</Coord> 
      <ObservationDetailMoyenCom /> 
      </DetailMoyenCom>
     <DetailMoyenCom>
      <Type>04.02.02</Type> 
      <Libelle>Fax</Libelle> 
      <Coord>04 XX XX XX XX</Coord> 
      <ObservationDetailMoyenCom /> 
      </DetailMoyenCom>
     <DetailMoyenCom>
      <Type>04.02.04</Type> 
      <Libelle>Mél</Libelle> 
      <Coord>infos@kjhdkjhkjhd.com</Coord> 
      <ObservationDetailMoyenCom /> 
      </DetailMoyenCom>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Utilise un prédicat sur sibling::Libelle = 'Téléphone' (ou sibling::Type = '04.02.01'), et des tutoriels xPath.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 82
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse:

    Voici ce que j'ai fait mais ça ne fonctionne pas....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tel = $fluxXml->xpath('/ListeResultat/Resultats/Resultat/MoyensCommunications/DetailMoyenCom/following-sibling::Type="04.02.01"');
    Je ne trouve pas d'exemple correspondant à mon cas dans les tutos...

    Merci par avance

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Bon, je vois que tu as corrigé mon erreur avec l'axe sibling:: qui existe pas. (J'avais oublié, dommage, ce serait pratique.) Et effectivement, les bons tutoriels xPath apparaissent un peu bas dans Google.

    Voilà ce que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /ListeResultat/Resultats/Resultat/MoyensCommunications/DetailMoyenCom[Type = '04.02.01']/Coord
    Une version courte qui suffit peut-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //DetailMoyenCom[Type = '04.02.01']/Coord
    Un tutoriel qui t'aurait servi : http://edutechwiki.unige.ch/fr/Tutoriel_XPath

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 82
    Points : 43
    Points
    43
    Par défaut
    Merci, c'est bien la syntaxe que j'ai tenté d'utiliser avant de poster.....

    Ca ne fonctionne malheureusement pas et je n'ai aucune idée du pourquoi.

    Je suis entrain de m'arracher les cheveux sur cette bricole

    Si qq un voit la coquille......

    Merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Edit : Je suis trop con, j'avais pas vu que tu utilises un default namespace.

    En xPath, ça existe pas, le default namespace. Pas de préfixe => pas de namespace. Aucune exception.

    Il va donc falloir associer un préfixe à ton namespace (comment ça j'en sais rien, voir avec PHP,) et utiliser ce préfixe dans tes expressions xPath.

    Du coup ça devrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //s:DetailMoyenCom[s:Type = '04.02.01']/s:Coord

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 82
    Points : 43
    Points
    43
    Par défaut
    Bien vu l'aveugle!!

    La solution pour associer un namespace en php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $fluxXml = simplexml_load_file ($filenameXml);
     
    $fluxXml->registerXPathNamespace('s', 'http://lkjdlkjlkjds');
     
    $tel = $fluxXml->xpath("//s:DetailMoyenCom[s:Type = '04.02.01']/s:Coord");
    Merci pour ton aide!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/06/2014, 15h20
  2. [SimpleXML] Récupérer valeur parents après XPath sur valeur enfant
    Par kaoboss dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/09/2011, 21h28
  3. Aide - Masquer des colonnes après application d'un filtre auto simple
    Par latouk dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 03/08/2011, 22h29
  4. [VBA-E] Parcourir les lignes filtrées après un filtre auto
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/10/2005, 13h14
  5. [Reflection] recup valeur champ Static
    Par Invité dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 04/07/2005, 18h09

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