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] DOMDocument getElementById DTD


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 14
    Points
    14
    Par défaut [XML] DOMDocument getElementById DTD
    Bonjour,

    Je cherche a utiliser la fonction DOMDocument::getElementById; La doc dit qu'il me faut déclarer un DTD. Sauf que je ne sais pas le faire.

    Quelqu'un saurai me montrer la voix pour créer ce DTD

    Voici mon PHP/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
     
    $xml = <<<XXX
    <?xml version="1.0" ?>
    <root>
        <value id="777">
            <value key="name">Container</value>
            <value id="888">
                <value key="name">Object</value>
                <link key="owner">777</link>
            </value>
        </value>
    </root>
    XXX;
     
    $doc = new DOMDocument('1.0');
    $doc->loadXML($xml);
    $element = $doc->getElementById('888');
    var_dump($element);
    Merci,

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Pas besoin de DTD, si y'a l’attribut id

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Merci stealth35,

    Le problème est peut être ailleurs dans ce cas. Car lorsque j'exécute le code que j'ai posté j’obtiens toujours NULL

    Une piste ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    http://fr.php.net/manual/en/domdocum...lementbyid.php

    For this function to work, you will need either to set some ID attributes with DOMElement::setIdAttribute or a DTD which defines an attribute to be of type ID. In the later case, you will need to validate your document with DOMDocument::validate or DOMDocument::$validateOnParse before using this function.
    Rajoute ceci entre <?xml et <root> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE root [
     
    <!ATTLIST value id ID #REQUIRED>
     
    ]>
    Tu peux trouver des tutos sur le web à propos de la rédaction des DTD, rien de compliqué.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    visiblement il faut faire :


  6. #6
    Inactif
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Géniale stealth35

    Merci Séb. ca "fonctionne" :
    Code PHP : 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
    <?php
     
    $xml = <<<XXX
    <?xml version="1.0" ?>
    <!DOCTYPE root [
     
    <!ATTLIST value id ID #REQUIRED>
     
    ]>
    <root>
        <value id="777">
            <value key="name">Container</value>
            <value id="888">
                <value key="name">Object</value>
                <link key="owner">777</link>
            </value>
        </value>
    </root>
    XXX;
     
    $doc = new DOMDocument('1.0');
    $doc->loadXML($xml);
    $element = $doc->getElementById('888');
    var_dump($element);

    Malheureusement, je n'ai pas la main sur le fichier *.xml et ces solutions m'oblige a le remanier (a la volé).

    En réalité, mon véritable problème provient d'une latence sur les $xpath->query('value[@id=XXX]') que j'ai utilisé pour palier a mon manque sur les DTD.
    Mais maintenant que je sais utiliser getElementById je me demande si ca va vraiment améliorer la recherche... Je vais faire les tests...

    Merci,
    @++

Discussions similaires

  1. [DTD] Tags Html dans XML ---> Etendre la dtd du Xhtml
    Par tipaquo dans le forum Valider
    Réponses: 14
    Dernier message: 19/07/2010, 09h09
  2. [XML] Parser une DTD?
    Par La Truffe dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 03/04/2007, 11h28
  3. Réponses: 2
    Dernier message: 03/06/2005, 11h00
  4. [XML][DTD] Générer un XML avec une DTD ?
    Par elitost dans le forum Valider
    Réponses: 6
    Dernier message: 04/05/2005, 12h48
  5. XML conforme à une DTD
    Par ange bleu dans le forum Valider
    Réponses: 4
    Dernier message: 20/04/2004, 09h37

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