p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Inactif
    Inscrit en
    mars 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : mars 2012
    Messages : 13
    Points : 11
    Points
    11

    Par défaut 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 Confirmé Sénior

    Inscrit en
    septembre 2010
    Messages
    7 957
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 7 957
    Points : 10 641
    Points
    10 641

    Par défaut

    Pas besoin de DTD, si y'a l’attribut id

  3. #3
    Inactif
    Inscrit en
    mars 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : mars 2012
    Messages : 13
    Points : 11
    Points
    11

    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 Confirmé Sénior Avatar de Séb.
    Profil pro
    Inscrit en
    mars 2005
    Messages
    3 224
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : mars 2005
    Messages : 3 224
    Points : 4 173
    Points
    4 173

    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 Confirmé Sénior

    Inscrit en
    septembre 2010
    Messages
    7 957
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 7 957
    Points : 10 641
    Points
    10 641

    Par défaut

    visiblement il faut faire :


  6. #6
    Inactif
    Inscrit en
    mars 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : mars 2012
    Messages : 13
    Points : 11
    Points
    11

    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. [DOM] getElementById + DTD
    Par crocodile dans le forum XML
    Réponses: 2
    Dernier message: 16/12/2009, 22h41
  2. [XML][DTD] Creer un parser à partir d'une DTD
    Par schnekre dans le forum Valider
    Réponses: 4
    Dernier message: 15/12/2003, 12h59
  3. Réponses: 2
    Dernier message: 29/07/2003, 12h52
  4. Faire respecter une DTD !!!
    Par haypo dans le forum Valider
    Réponses: 3
    Dernier message: 12/07/2003, 19h20
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

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