Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/05/2012, 14h49   #1
shurik'n
Inactif
 
Inscription : 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,
shurik'n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 15h10   #2
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Pas besoin de DTD, si y'a l’attribut id
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 15h39   #3
shurik'n
Inactif
 
Inscription : mars 2012
Messages : 13
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 13
Points : 10
Points : 10
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 ?
shurik'n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 15h54   #4
Séb.
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 974
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 974
Points : 3 690
Points : 3 690
http://fr.php.net/manual/en/domdocum...lementbyid.php

Citation:
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/05/2012, 15h59   #5
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
visiblement il faut faire :

__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/05/2012, 16h23   #6
shurik'n
Inactif
 
Inscription : mars 2012
Messages : 13
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 13
Points : 10
Points : 10
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,
@++
shurik'n est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h16.


 
 
 
 
Partenaires

Hébergement Web