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

APIs XML Discussion :

[PHP][XPATH] problème de chemin


Sujet :

APIs XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [PHP][XPATH] problème de chemin
    Bonjour,

    Je cherche à charger la première photo mais j'ai un problème au niveau de mon chemin ; c'est à dire :

    L'élément newsCoponent avec attribut Duid="photo0" ;
    La donnée de l'atribut Href dans l'élément ContentItem ;
    Qui a pour Role FormalName="Thumbnail" ;


    le 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    <?xml version="1.0" encoding="UTF-8"?>
    <NewsML Version="1.2">
      <Catalog Href="http://www.afp.com/dtd/AFPCatalog.xml"/>
      <NewsEnvelope>
        <DateAndTime>20101108T070638Z</DateAndTime>
      </NewsEnvelope>
      <NewsItem>
        <Identification>
          <NewsIdentifier>
            <ProviderId>afp.com</ProviderId>
            <DateId>20101108</DateId>
            <NewsItemId>CNG.47ab18a676f3a97600ed0c2cd32b4368.01</NewsItemId>
            <RevisionId PreviousRevision="1" Update="N">2</RevisionId>
            <PublicIdentifier>urn:newsml:afp.com:20101108:CNG.47ab18a676f3a97600ed0c2cd32b4368.01:2</PublicIdentifier>
          </NewsIdentifier>
          <NameLabel>Energie-nucléaire-environnement-social-manifestation</NameLabel>
        </Identification>
        <NewsManagement>
          <NewsItemType FormalName="News"/>
          <FirstCreated>20101105T112526Z</FirstCreated>
          <ThisRevisionCreated>20101108T070617Z</ThisRevisionCreated>
          <Status FormalName="Usable"/>
        </NewsManagement>
        <NewsComponent>
          <NewsLines>
            <HeadLine>Convoi de déchets nucléaires: l'évacuation des opposants est finie</HeadLine>
            <DateLine>DANNENBERG (Allemagne) (AFP)</DateLine>
            <CopyrightLine>© 2010 AFP</CopyrightLine>
            <SlugLine>Energie-nucléaire-environnement-social-manifestation</SlugLine>
          </NewsLines>
          <AdministrativeMetadata>
            <Provider>
              <Party FormalName="AFP" />
            </Provider>
          </AdministrativeMetadata>
          <DescriptiveMetadata>
            <Language FormalName="fr" />
            <OfInterestTo FormalName="francais--journal--une"/>
            <Location HowPresent="Origin">
              <Property FormalName="Country" Value="DEU"/>
              <Property FormalName="City" Value="DANNENBERG"/>
              <Property FormalName="Latitude" Value="49.51667"/>
              <Property FormalName="Longitude" Value="-1.46667"/>
            </Location>
            <SubjectCode>
              <Subject FormalName="06000000"/>
            </SubjectCode>
            <SubjectCode>
              <Subject FormalName="06000000"/>
            </SubjectCode>
            <SubjectCode>
              <SubjectDetail FormalName="04005005"/>
            </SubjectCode>
            <SubjectCode>
              <Subject FormalName="09000000"/>
            </SubjectCode>
            <SubjectCode>
              <SubjectMatter FormalName="16008000"/>
            </SubjectCode>
          </DescriptiveMetadata>
          <NewsComponent>
            <ContentItem>
              <MediaType FormalName="Text"/>
              <Format FormalName="bcNITF2.5"/>
              <DataContent>
                <media media-type="image" style="leftSide">
                  <media-reference data-location="#photo0" mime-type=""/>
                </media>
                <p>La police allemande a achevé lundi matin l'évacuation des manifestants qui bloquaient la voie ferrée que doit emprunter un convoi de déchets nucléaires venu d'un site d'Areva en France vers le site de stockage de Gorleben (nord), une opération qui a duré toute la nuit.</p>
                <p>"L'évacuation est terminée, il n'y plus personne sur la voie ferrée", a dit à l'AFP vers 07H30 (06H30 GMT) une porte-parole de la police à Lunebourg.</p>
                <p>La police estime qu'au début de l'évacuation, qui s'est passée dans le calme, environ 3.000 personnes étaient présentes pour faire barrage au convoi, à Harlingen, à une quinzaine de kilomètres environ de la gare de Dannenberg.</p>
                <p>C'est là que la cargaison du train, parti de France vendredi, sera transférée sur des camions pour les 20 derniers kilomètres jusqu'à Gorleben.</p>
                <p>Le train a passé la nuit à l'arrêt à Dahlenburg, une dizaine de kilomètres en amont de Harlingen et ne devait redémarrer qu'une fois la voie entièrement libre.</p>
                <p>Certains manifestants ayant tenté de retourner sur les voies après avoir été délogés par les policiers ont été placés en garde-à-vue, a dit la police.</p>
                <p>D'autres qui n'obtempéraient pas ont eux aussi été interpellés, et placés dans des tentes sous surveillance policière dans un champ proche, a précisé la porte-parole.</p>
                <media media-type="image" style="rightSide">
                  <media-reference data-location="#photo1" mime-type=""/>
                </media>
                <p>Elle n'était pas en mesure de dire combien de personnes étaient concernées.</p>
                <p>Ces manifestants resteront en garde-à-vue jusqu'à ce que le convoi "Castor", du nom des conteneurs spéciaux abritant les déchets nucléaires soit arrivé en gare de Dannenberg, a-t-elle dit.</p>
                <p>De nombreux manifestants ont accepté de quitter les lieux par leurs propres moyens, d'autres ont opté pour une résistance passive, se laissant porter par les policiers loin des rails.</p>
                <p>Au total, près de 20.000 fonctionnaires de police ont déjà été mobilisés en Allemagne pour protéger ce convoi, selon le chef du syndicat policier DPolG, Rainer Wendt, cité dans les médias allemands.</p>
                <p>Il s'agit du 12e convoi depuis 1995 rapatriant vers l'Allemagne des déchets nucléaires allemands retraités en France. Des violences avaient émaillé la journée de dimanche entre manifestants et policiers.</p>
              </DataContent>
            </ContentItem>
          </NewsComponent>
          <NewsComponent Duid="photo0">
            <NewsLines>
              <HeadLine>Des policiers tentent de déloger des militants antinucléaires qui cherchent à couper la voie ferrée pour empêcher le passage d'un train de déchets radioactifs, le 7 novembre 2010 à Metzingen en Allemagne</HeadLine>
            </NewsLines>
            <AdministrativeMetadata>
              <Provider>
                <Party FormalName="AFP"/>
              </Provider>
              <Creator>
                <Party FormalName="Johannes Eisele"/>
              </Creator>
            </AdministrativeMetadata>
            <NewsComponent>
              <Role FormalName="Caption"/>
              <ContentItem>
                <MediaType FormalName="Text"/>
                <Format FormalName="bcNITF2.5"/>
                <DataContent>
                  <p>La police allemande a achevé lundi matin l'évacuation des manifestants qui bloquaient la voie ferrée que doit emprunter un convoi de déchets nucléaires venu d'un site d'Areva en France vers le site de stockage de Gorleben (nord), une opération qui a duré toute la nuit.</p>
                </DataContent>
              </ContentItem>
            </NewsComponent>
            <NewsComponent>
              <Role FormalName="Thumbnail"/>
              <ContentItem Href="photo_1289143089462-1-2.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="110"/>
                  <Property FormalName="Height" Value="66"/>
                </Characteristics>
              </ContentItem>
            </NewsComponent>
            <NewsComponent>
              <Role FormalName="Quicklook"/>
              <ContentItem Href="photo_1289143089462-1-1.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="245"/>
                  <Property FormalName="Height" Value="148"/>
                </Characteristics>
              </ContentItem>
            </NewsComponent>
            <NewsComponent>
              <Role FormalName="Preview"/>
              <ContentItem Href="photo_1289143089462-1-0.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="512"/>
                  <Property FormalName="Height" Value="309"/>
                </Characteristics>
              </ContentItem>
            </NewsComponent>
          </NewsComponent>
          <NewsComponent Duid="photo1">
            <NewsLines>
              <HeadLine>Convoi de déchets radioactifs</HeadLine>
            </NewsLines>
            <AdministrativeMetadata>
              <Provider>
                <Party FormalName="afp.com"/>
              </Provider>
              <Creator>
                <Party FormalName=""/>
              </Creator>
            </AdministrativeMetadata>
            <NewsComponent>
              <Role FormalName="Caption"/>
              <ContentItem>
                <MediaType FormalName="Text"/>
                <Format FormalName="bcNITF2.5"/>
                <DataContent>
                  <p>Carte situant les principales actions des antinucléaires sur le trajet d'un convoi ferroviaire de déchets nucléaires allemands retraités de la France vers l'Allemagne</p>
                </DataContent>
              </ContentItem>
            </NewsComponent>
            <NewsComponent>
              <Role FormalName="Thumbnail"/>
              <ContentItem Href="photo_1289174035651-1-2.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="110"/>
                  <Property FormalName="Height" Value="98"/>
                </Characteristics>
              </ContentItem>
            </NewsComponent>
            <NewsComponent>
              <Role FormalName="Quicklook"/>
              <ContentItem Href="photo_1289174035651-1-1.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="245"/>
                  <Property FormalName="Height" Value="218"/>
                </Characteristics>
              </ContentItem>
            </NewsComponent>
            <NewsComponent>
              <Role FormalName="Preview"/>
              <ContentItem Href="photo_1289174035651-1-0.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="512"/>
                  <Property FormalName="Height" Value="455"/>
                </Characteristics>
              </ContentItem>
            </NewsComponent>
          </NewsComponent>
        </NewsComponent>
      </NewsItem>
    </NewsML>
    Pour l'instant j'ai effectué ceci :

    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
     
    //Gestion du contenu des articles  
       $xmlArticle = simplexml_load_file($path.'newsmlmmd.'.$itemRef.'.xml');
     
        //Verrification du chemin
       if (!$xmlArticle) {
            echo "Erreur lors du chargement du XML\n";
            foreach(libxml_get_errors() as $error) {
                echo "\t", $error->message;
            }
        }
     
       $basePhoto = $xmlArticle->xpath('//NewsComponent[@Duid="photo0"]/NewsComponent[Role/@FormalName="Thumbnail"]/ContentItem[@Href]');
     
       if (!$basePhoto) {
            echo "Erreur lors du chargement du chemin XML\n";
            foreach(libxml_get_errors() as $error) {
                echo "\t", $error->message;
            }
     
        }else{
           echo $basePhoto;
        }

    Je remet mon xpath pour mieux cerner le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $xmlArticle->xpath('//NewsComponent[@Duid="photo0"]/NewsComponent[Role/@FormalName="Thumbnail"]/ContentItem[@Href]');
    Et il ne m'affiche rien même pas un erreur Et je bloque est ce que quelqu'un aurais une idée ou je me serais tromper par hasard ?

    Je vous remercie par avance.

    Edit: Une petite erreur sur le else de la condition (!$basePhoto) et là il m'affiche Array le hic c'est qu'il devrait m'afficher photo_1289174035651-1-2.jpg du moins c'est ce que je désirs

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [PHP-XPATH] problème de chemin -> réussir à recupérer la valeur d'attribut
    Bon au final ce n'est pas mon chemin qui est véritablement faux j'explique :

    j'ai effectué un print_r() à ma varriable de chemin (je précise que j'ai enlevé @Href car il me donne tout à l'identique ce qui suit):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $basePhoto = $xmlArticle->xpath('//NewsComponent[@Duid="photo0"]/NewsComponent[Role/@FormalName="Thumbnail"]/ContentItem');
     
       if (!$basePhoto) {
            echo "Erreur lors du chargement du chemin XML\n";
            foreach(libxml_get_errors() as $error) {
                echo "\t", $error->message;
            }
        }else{
     
              print_r($basePhoto);
            }
    Et je me retrouvavec des tableaux de ce type :

    Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Href] => photo_1289375899838-1-2.jpg ) [MediaType] => SimpleXMLElement Object ( [@attributes] => Array ( [FormalName] => Photo ) ) [Characteristics] => SimpleXMLElement Object ( [Property] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [FormalName] => Width [Value] => 110 ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [FormalName] => Height [Value] => 73 ) ) ) ) ) )
    c'est à dire dans le fichier xml ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            <ContentItem Href="photo_1289143089462-1-2.jpg">
                <MediaType FormalName="Photo"/>
                <Characteristics>
                  <Property FormalName="Width" Value="110"/>
                  <Property FormalName="Height" Value="66"/>
                </Characteristics>
              </ContentItem>
    Par la suite je remplace mon print_r par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $basePhoto = $xmlArticle->xpath('//NewsComponent[@Duid="photo0"]/NewsComponent[Role/@FormalName="Thumbnail"]/ContentItem');
     
       if (!$basePhoto) {
            echo "Erreur lors du chargement du chemin XML\n";
            foreach(libxml_get_errors() as $error) {
                echo "\t", $error->message;
            }
        }else{
              $donneeResult =  $basePhoto[0]['Href']->asXml();
            }
        echo $donneeResult;
    et je me retrouve avec :
    Href="photo_1289143089462-1-2.jpg"
    le hic maintenant c'est que je recherche la valeur de l'attribut c'est à dire : photo_1289143089462-1-2.jpg

    et je n'arrive pas à trouver le moyen de faire ceci juste après l'avoir récupéré dans un array , voir même si c'est possible de récuperer directement dans mon xpath cette donnée vu que le reste ne m'intéresse pas à ce niveau.

    Si vous avez des suggestion je suis à votre écoute.

    Je vous remercie par avance

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Resolution
    Au final c'est tout "simple" (j'aimerais bien dire autre chose )

    Il suffit d'enlever le ->asXml() ou d'utiliser un str_replace()
    "asXml() : // asXML() will keep the HTML tags but it will also keep the parent tag" source : http://php.net/manual/fr/function.si...-load-file.php un exemple effectué par Kyle

    Après je ne sais pas s'il est mieux de faire avec un str_replace ou non moi là je préfèrerais sans après si' quelqu'un me dit que c'est mieux avec j'aimerais bien savoir le pourquoi ... si vous avez des infos là dessus je suis tout ouïe .

    Sinon pour le code pour ceux que ca peu intéresser (avec au final changement du xpath vu que je ne désire que l'attribut href):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $basePhoto = $xmlArticle->xpath('//NewsComponent[@Duid="photo0"]/NewsComponent[Role/@FormalName="Thumbnail"]/ContentItem/@Href');
     
       if (!$basePhoto) {
            echo "Erreur lors du chargement du chemin XML\n";
            foreach(libxml_get_errors() as $error) {
                echo "\t", $error->message;
            }
        }else{
              //print_r($basePhoto);
     
              $donneeResult =  $basePhoto[0]['Href'];
            }
          print $donneeResult;
    Voila je ne trouve pas pour l'instant ou il faut cliquez ou autre pour dire que c'est résolu donc au cas si quelqu'un sait je le remercie ^^

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

Discussions similaires

  1. [XPATH] problème de chemin dans un xslt
    Par cinou01 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/11/2010, 14h13
  2. Réponses: 13
    Dernier message: 21/01/2010, 13h55
  3. Problème de chemin en PHP : suppression des espaces
    Par zabdaniel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/05/2009, 11h31
  4. XPath: intersection de chemins
    Par aldo047 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/03/2003, 10h30
  5. [Class/PHP/Postgres] Problème de modélisation...
    Par k-reen dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/02/2003, 08h49

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