Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2007, 16h52   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 89
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2006
Messages : 89
Points : 30
Points : 30
Par défaut [DOM] Problème avec le tutoriel RSS

J'utilise un tutoriel de Developpez.com pour mettre en place un système de RSS. J'utilise le code fourni avec PHP 5. Je rencontre un problème et j'ai des qq questions complémentaires:

1/ j'arrive à générer un fichier XML avec la fonction a/ j'aimerais que le fichier généré possède des retours chariots et une indentation (tabulations) qui me permettent de le relire facilement dans un éditeur de texte. Est-ce possible?
b/ j'aimerais tracer le contenu des noeuds créés pour vérifier dans mes logs qu'ils ont été générés avec les informations voulues. Pour afficher le contenu de la racine par exemple, j'ai utisé la fonction Les logs ne m'affichent que "root = DOMElement Object()" mais sans son contenu, existe-t-il un moyen simple d'afficher le contenu?

2/ je n'arrive pas à exécuter correctement la méthode
Code :
addOneNews($file, $title, $timestamp, $author)
Je lève une exception sur la ligne de code
Code :
$element_item = $element_channel->appendChild($element_item);
qui m'explique que l'objet "$element_item" est null. Etonnant car le fichier était pourtant bien généré comme expliqué au premier point...

Si qq a qq indices, merci!
Flashball est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 19h00   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
  1. a)
    Dans createXML et après $file = new DOMDocument("1.0");, ajoutez :
    Code :
    $file->formatOutput = TRUE;
    b) La méthode saveXML est bien plus adéquate :
    Code :
    1
    2
    3
    $fil = createXML();
    # ...
    echo $fil->saveXML();
  2. Un élément channel ne passe visiblement pas la validation avec un attribut id ... Toutefois pour corriger l'erreur, au choix :
    Remplacez dans createXML :
    Code :
    $element_channel->setAttribute("id", "news");
    Par :
    Code :
    $element_channel->setAttribute("xml:id", "news");
    Ou, remplacez :
    Code :
    $element_channel = $file->getElementById('news');
    Par :
    Code :
    1
    2
    $xpath = new DomXPath($file);
    $element_channel = $xpath->query('/rss/channel[@id="news"]')->item(0);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 19h33   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 89
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2006
Messages : 89
Points : 30
Points : 30
Merci beaucoup, c'est impeccable...
Peut-être peut-on prévenir l'auteur de ce tutoriel pour une petite MAJ afin d'éviter de futures galères - j'ai pas trouvé où par contre?

J'en profite pour enchainer sur une autre question:

j'ai codé l'ajout d'une nouvelle news en BDD qui est désormais suivi du code de création d'une news dans le flux RSS. Cependant, cette news apparait à la suite des autres news, hors il me semble que sur les flux RSS, les plus récentes apparaissent en premier. Comment faire pour que la méthode
Code :
addOneNews($file, $title, $timestamp, $author)
insère une news en premier dans le fichier XML?

Merci!
Flashball est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 19h49   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Tout est relatif, car si vous ajoutez une nouvelle "donnée" (avec DOM directement) qui chronologiquement s'intercale entre deux autres, elle ne sera pas non plus à sa place

Créez-vous le fil à partir de la base de données ? Si oui, il vous suffit d'ajouter la clause ORDER BY timestamp ASC (tri croissant) ou DESC (tri décroissant).


PS : pour le contacter, c'est par .
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h22   #5
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 89
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2006
Messages : 89
Points : 30
Points : 30
oui, je crée le fil à partir de la BDD

j'avais à l'origine en tête d'ajouter un élément au fil à chaque insertion en BDD, mais effectivement, le plus simple est de regénéré entièrement le fil - du moins les X derniers - avec les clauses "order by" et "limit".
Flashball est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 19h32   #6
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Merci beaucoup à vous deux pour les corrections

Je vais mettre à jour l'article dès que j'aurai un peu de temps
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h20.


 
 
 
 
Partenaires

Hébergement Web