Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Inactif
    Inscrit en
    mars 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : mars 2012
    Messages : 13
    Points : 10
    Points
    10

    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 :
    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
    Modérateur

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

    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 : 10
    Points
    10

    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 : 36
    Localisation : France

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

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

    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 :
    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
    Modérateur

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

    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 : 10
    Points
    10

    Par défaut

    Géniale stealth35

    Merci Séb. ca "fonctionne" :
    Code PHP :
    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,
    @++

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •