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 :

[XML] Parser un XML avec des namespaces


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [XML] Parser un XML avec des namespaces
    Bonjour,


    Je cherche à parser du XML.
    Il existe quantité de petit tuto sur le sujet et c'est plutôt simple.

    Cependant j'ai des problèmes avec les namespaces.

    Je consulte un web-service qui me répond avec un fichier XML Zippé.

    Voila un XML qui ressemble à celui que me renvoie le web-service.
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageGetInventaire xmlns="http://www.toto.org/types/" xmlns:ns2="http://www.toto.fr/XML/Schema/">
        <ns2:InfoMagazin>
            <ns2:Adresse>
                <ns2:CodePays>FR</ns2:CodePays>
                <ns2:Numero>01999999</ns2:Numero>
            </ns2:Adresse>
            <ns2:DateOuverture>2014-01-01</ns2:DateOuverture>
            <ns2:StockProduitFini>true</ns2:StockProduitFini>
        </ns2:InfoMagazin>
        <Produits>  <!-- Bizarement cette balise n'a pas le namespace ns2  -->
            <ns2:Produit>
                 <ns2:IdProduit>11</ns2:IdProduit>
                 <ns2:NomProduit>Savon</ns2:NomProduit>
                 <ns2:Caracteristiques>
                      <ns2:Caracteristique>...</ns2:Caracteristique>
                 </ns2:Caracteristiques>
            </ns2:Produit>
            <ns2:Produit>
                 <ns2:IdProduit>12</ns2:IdProduit>
                 <ns2:NomProduit>Crayon</ns2:NomProduit>
            </ns2:Produit>
     
            .
            .
            .
         </Produits>
    </MessageGetInventaire>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $pathToXML = '/var/www/worsp...........file.xml;'
    $xml = new SimpleXMLElement($pathToXML, null, true);
    //Je peux récupérer les données du premier bloque ainsi :
    $ns2                = $namespaces['ns2'];
    $CodePays            = (string)$xml->children($ns2)->InfoMagazin->Adresse->CodePays;
    $Numero                  = (string)$xml->children($ns2)->InfoMagazin->Adresse->Numero;
    //Cependant pour aller chercher les données des produits
    //Je dois faire ceci
    $produits             = $xml->Produits->children($ns2)
    Est ce qu'il est normal d'avoir le namespace ns2 partout sauf sur <Produits> ?
    Est ce que cela peut être un oublie des concepteur du web-service ou est ce une norme que je ne connais pas.
    De plus je ne vois pas trop l'intérêt de mettre un namespace Partout.
    L'intérêt des namespaces c'est qu'on peux en mettre plusieurs différent.

    N'y a t'il pas un moyen de Parser mon XML en Ignorant les namespaces ?

    Merci pour vos lumière.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Q1
    Est ce qu'il est normal d'avoir le namespace ns2 partout sauf sur <Produits> ?
    A1 Je pense ce n'est pas une question de normalité ou non car il n'y a pas de règle générale qui pèse sur le choix que le concepteur de ws devrait préferer l'un parmi les autres. Je ne pense pas qu'il y en a.

    Q2
    Est ce que cela peut être un oublie des concepteur du web-service ou est ce une norme que je ne connais pas.
    A2 Encore il est inutile d'essayer de deviner ce que le concepteur conçoit à y mettre au juste. Si vous en doutez, vous pouvez toujours regarder le document wsdl, si applicable, qui normalement est publié pour les gens qui vont consummer le service de le consulter.

    Q3
    De plus je ne vois pas trop l'intérêt de mettre un namespace Partout.
    A3 Là c'est une opinion qu'on a tout à fait le droit d'en avoir. Mais c'est normalement fait par ceux qui n'apprécient pas trop la téchnologie xml. La précision de namespace est une bonne chose. Si la présence du préfix "partout" vous gène, vous pouvez utiliser un moyen de mis en page dit le namespace par défaut avec son inhéritage... comme ça pour les lignes 20-23:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            <Produit xmlns="http://www.toto.fr/XML/Schema/">
                 <IdProduit>12</IdProduit>
                 <NomProduit>Crayon</NomProduit>
            </Produit>
    Mais c'est un choix qui fait part de l'auteur du document ou en partie de l'engin qui fait générer le document et non pas de consommateurs du document. En tout car, les deux versions sont tout à fait équivalentes en ce qui concerne la téchnologie xml propre.

    Q3.1
    L'intérêt des namespaces c'est qu'on peux en mettre plusieurs différent.
    A3.1 Si vous voulez, mais ce n'est pas d'issue que l'idée de namespace soit inventée à résoudre. Ce n'est pas que il y en a plusieurs ou qu'il y en a un seul namespace qui est important. C'est d'où appartenir les vocabulaires qui est l'issue.

    Q4
    N'y a t'il pas un moyen de Parser mon XML en Ignorant les namespaces ?
    A4 Pour SimpleXML, je ne connais pas... En tout cas, ce n'est pas une bonne chose à faire a priori, à mon sens. Si les namespaces et leurs préfixes vous gènent tant, vous pouvez toujours utiliser d'une façon systematique xpath où on questionne sur une élément par exemple ns2:Caracteristique par *[local-name()='Caracteristique']. Mais pourquoi tant de gène pour une chose, xml idiosyncratique - oui, qui a un but d'aider plutôt que d'ennuyer les gens ? Je ne sais pas.

Discussions similaires

  1. [JDOM] Modifier fichier xml avec des namespaces
    Par cdg13 dans le forum Format d'échange (XML, JSON...)
    Réponses: 17
    Dernier message: 06/02/2014, 09h16
  2. [Flex4] Parser un XML avec des références
    Par laurentm44 dans le forum Flex
    Réponses: 10
    Dernier message: 24/08/2012, 18h25
  3. Parser un fichier xml avec des tag names contenant ":" !
    Par sofien dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/11/2010, 10h40
  4. parser du xml avec des methodes compatibles php4/php5
    Par chezdevelopping dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/12/2009, 15h44
  5. [CXF et JAXB] Parser un fichier XML avec des namespaces
    Par cowa dans le forum Services Web
    Réponses: 0
    Dernier message: 26/02/2009, 14h30

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