Comment "parser" une balise XML avec espace de nom ?
yhugo
Member
dans Modifications
Bonjour à tous,
j'aimerais savoir comment "parser" une balise XML avec espace de noms (namespace) ?
Exemple :
Dans class.plx.motor.php j'ai essayé de remplacer $parser = xml_parser_create(PLX_CHARSET); par $parser = xml_parser_create_ns(PLX_CHARSET, ':');, mais ça n'a pas fonctionné ...
Quelqu'un pourrait me guider svp ?
Merci, bon dimanche à vous tous !
j'aimerais savoir comment "parser" une balise XML avec espace de noms (namespace) ?
Exemple :
# Génération du fichier XML
$xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";
$xml .= "<document xmlns:dc='http://purl.org/dc/terms/'>\n";
$xml .= "\t".'<infopost>'."\n";
$xml .= "\t\t".'<dc:title><![CDATA['.trim($content['title']).']]></dc:title>'."\n";
$xml .= "\t".'</infopost>'."\n";
$xml .= "</document>\n";
Pour l'instant les balises auxquelles j'ai ajoutées des préfixes pour les espaces de noms ne s'affichent pas dans le site : Autant dans l'admin que dans la partie public.Dans class.plx.motor.php j'ai essayé de remplacer $parser = xml_parser_create(PLX_CHARSET); par $parser = xml_parser_create_ns(PLX_CHARSET, ':');, mais ça n'a pas fonctionné ...
Quelqu'un pourrait me guider svp ?
Merci, bon dimanche à vous tous !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je pense qu'avec ce bout de code, cela devrait t'inspirer
la fonction xml_parser_create_ns remplace xml_parser_create
de plus il faut adapter la récupération des données
A toi d'adapter selon tes besoins
Stéphane
nb: j'ai mis UTF-8 en dur plutôt que d'utiliser PLX_CHARSET. ça te permettra de tester le code avec un simple copier coller dans un fichier php et un fichier test.xml
le fichier xml:
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Je vais jouer avec ce bout de code aujourd'hui et je t'en redonne des nouvelles.
Bonne journée
@Stephane : J'ai essayé le code que tu m'as proposé dans des fichiers à part en dehors de Pluxml... Et ça a bien fonctionné.
J'ai donc entrepris de faire les changements dans Pluxml, mais là il n'y a rien qui s'affiche ... rien ne se passe. Ça ne bug pas non plus, donc il me manque quelque chose ... ?
Voici la fonction parseArticle() que j'ai modifié :
Merci, à bientôt
regarde cette ligne compare là avec tu vois la différence avec le $namespace.
C'est ça qu'il te manque dans la récupération de tous les champs
Stéphane
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
pourtant c'est ce que j'ai mis ... si tu regardes la 12e ligne du bloc de code ci-haut ... Pour l'instant je ne l'ai fait que pour 'title' mais c'est bien cette ligne ...
Les lignes que j'ai modifiées ont //YHS ADD au bout.
Est-ce que le problème peut être dans le fichier XML ? Si le parent du noeud 'title' a un préfixe d'espace de nom lui-aussi est-ce que ça peut empêcher la récupération ?
Merci encore, bonne journée
Tu peux définir une constante dans le fichier config.php du genre
et en recherchant dans les fichiers de pluxml l'appel de la fonction parseArticle, il faut changer, par exemple dans class.plx.motor.php dans la fonction getArticle
par
reste plus qu'à faire pareil, aux autres endroits ou parseArticle est appelé.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Si j'ai besoin d'utiliser plus d'un espace de nom dans mon fichier XML ... Est-ce possible de "parser" un fichier qui en contiendrait plusieurs ?
Merci, bonne fin de journée
Merci.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
en fait mon but ultime c'est de transformer PluXML pour qu'il gère les fichiers RDF/XML ...
Pour l'instant les fichiers .RDF que je génère pour les articles ressemblent à ça :
Comme tu peux voir dans la balise ouvrante <rdf:RFD>, je fais référence à quelques "namespaces".
Merci, bonne fin de soirée
Désolé mais je ne trouve pas de réponses à ta question.
Je ne sais pas faire dans le cas de plusieurs namespace et avec une telle structure de fichier xml
Stéphane.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
pas grave je finirai bien par trouver... De toute façon ce n'est pas très pressant, c'est un projet personnel.
Merci beaucoup pour ton aide, bonne fin de journée