IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP5 & simplexml


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut PHP5 & simplexml
    Bonjour,

    j'espere que je poste dans la bonne rubrique.

    dans le but de realiser un site web multilingue, j'ai opté pour la solution des fichiers textes qui seront probablement au format .xml (http://www.developpez.net/forums/d80...multi-langues/)
    mais je me pose quelques question par rapport a l'utilisation de simplexml.

    j'aurais un fichier du genre:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?xml version="1.0" encoding="UTF-8"?>
    <language>
    	<text id="administration"><![CDATA[Administration]]></text>
    	<text id="associatedtemplate"><![CDATA[Associated template]]></text>
    	<text id="sortingdocumentofcategory"><![CDATA[Sorting child document of %s]]></text>
    	<text id="loadinprogress"><![CDATA[Load in progress]]></text>
    	<text id="documentmoved"><![CDATA[The document %s has been correctly moved to %s]]></text>
    	<text id="movingdocument"><![CDATA[Moving document]]></text>
    	<text id="movingtemplate"><![CDATA[Moving template]]></text>
    	<text id="documentnotallowedhere"><![CDATA[The document type %s is not allowed in the document type %s]]></text>
    	<text id="errorwhilemoving"><![CDATA[Error while moving]]></text>
    	<text id="configuration"><![CDATA[Configuration]]></text>
    	<text id="configurationgeneral"><![CDATA[General]]></text>
    	<text id="configurationsaves"><![CDATA[Backups]]></text>
    	<text id="never"><![CDATA[Never]]></text>
    	<text id="icon"><![CDATA[Icon]]></text>
    	<text id="status"><![CDATA[Status]]></text>
    	<text id="created_by"><![CDATA[Created by %1$s on %2$s]]></text>
    	<text id="creator"><![CDATA[Creator]]></text>	
    	<text id="change"><![CDATA[Change]]></text>
    	<text id="setchildrenstatus"><![CDATA[Set children status]]></text>
    	<text id="views"><![CDATA[Views]]></text>
    	<text id="view"><![CDATA[View]]></text>
    	<text id="import_tab"><![CDATA[Importer a tab]]></text>
    	<text id="published"><![CDATA[Published]]></text>
    	<text id="unpublished"><![CDATA[Unpublished]]></text>
    	<text id="validated"><![CDATA[Validated]]></text>
    	<text id="created"><![CDATA[Created]]></text>
    	<text id="showhide"><![CDATA[Show / Hide]]></text>
    </language>
    comment pourrais-je recuperer tout simplement la contenu de la balise qui a comme identifiant "creator" ???

    merci beaucoup

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Ce n'est pas la structure la plus adaptée pour l'utilisation de SimpleXML car pour un accès direct il faudrait que l'attribut id soit en réalité le nom de l'élément.

    Bref, pour exploiter ça :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    class I18N_SimpleXML {
        protected $locale;
        protected $sxml;
     
        # Constructeur à adapter/développer
        public function __construct($locale) {
            $this->locale = $locale;
            $this->sxml = simplexml_load_file(sprintf('%s.xml', $locale));
        }
     
        # tout est/doit être en UTF-8 (paramètres et valeur de retour)
        public function translate($msgid, $args = NULL) {
            $res = $this->sxml->xpath(sprintf('/language/text[@id = "%s"]', $msgid));
            if (!$res) {
                $msgstr = $msgid;
            } else {
                $msgstr = (string) $res[0];
            }
            if ($args) {
                return vsprintf($msgstr, $args);
            } else {
                return $msgstr;
            }
        }
    }
     
    $i18n = new I18N_SimpleXML('en');
    echo $i18n->translate('documentmoved', array('from', 'to'));
    echo PHP_EOL;
    echo $i18n->translate('unknown_term');
    The document from has been correctly moved to to
    unknown_term

  3. #3
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je ne sais pas si tu as avancé. Mais avec un exemple aussi simple que celui-ci tu devrais comprendre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    // Mets tes data XML dans le fichier cdata
    $xml = simplexml_load_file('cdata.xml');
     
    print "<pre>";
      print_r($xml);
    print "</pre>";
    ?>
    Tu sais probablement que le Parser XML ignore le CDATA ?

    Voici un truc simpliste mais qui fonctionne.
    Le fichier en.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <en>
    	<administration>Administration</administration>
    	<associatedtemplate>Associated template</associatedtemplate>
        <loadinprogress>Load in progress</loadinprogress>
    </en>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $xml = simplexml_load_file('en.xml');
     
    foreach( $xml as $value){
     
    	echo $value."<br>";
    }
    ?>
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Merci les gars pour vos réponses...

    julp: merci pour le script mais j'avoue que je n'ai pas compris grand chose, je ne suis pas trop familier avec les classes et constructeurs...
    J’espérais qu'il ait un moyen simple pour récupérer le texte par exemple un getElementById...
    Ce n'est pas la structure la plus adaptée pour l'utilisation de SimpleXML car pour un accès direct il faudrait que l'attribut id soit en réalité le nom de l’élément
    Quelle structure me recommandes-tu?
    En fait on peut considérer que l'attribut id est le nom de l'élément, non??

    riete: merci a toi aussi pour ton aide.
    j'etais justement entrain d'explorer ta piste que j'ai trouve sur ce lien http://tecfa.unige.ch/guides/tie/htm...php-xml-4.html mais apparemment le CDATA me pose un problem, j'ai retiré CDATA des 2 ppremiers element puis en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $xml = simplexml_load_file("general.inc.xml") ;
    echo "<pre>";
      print_r($xml);
      echo "</pre>";
    j'obtiens ce resultat:
    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
    19
    20
    21
    22
    23
    24
    SimpleXMLElement Object
    (
        [text] => Array
            (
                [0] => Administration
                [1] => Associated template
                [2] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [id] => sortingdocumentofcategory
                            )
     
                    )
     
                [3] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [id] => loadinprogress
                            )
     
                    )
    ......
    Pourquoi il ne m'affiche pas le contenu des autres éléments ayant le CDATA?

    Déjà une chose avant que j'aille plus loi: est ce que c'est possible de modifier/ajouter/supprimer UN SEUL élément d'un fichier xml ??

    Merci

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par redah75 Voir le message
    quelle structure me recommandes tu?
    en fait on peut considerer que l'attribut id est le nom de l'element, non??
    Je pensais à :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <language>
    	<administration><![CDATA[Administration]]></administration>
    	<associatedtemplate><![CDATA[Associated template]]></associatedtemplate>
    	<sortingdocumentofcategory><![CDATA[Sorting child document of %s]]></sortingdocumentofcategory>
    	<loadinprogress><![CDATA[Load in progress]]></loadinprogress>
    	<!-- ... -->
    </language>
    Ainsi il suffit de faire $sxml->msgid pour avoir directement la traduction du msgid voulu ($sxml étant l'objet SimpleXMLElement). ($sxml->creator par exemple)

    Citation Envoyé par redah75 Voir le message
    deja une chose avant que j'aille plus loi: est ce que c'est possible de modifier/ajouter/supprimer UN SEUL element d'un fichier xml ??
    Oui Après tout dépend de la structure retenue : la structure initiale sera plus difficile à manipuler que celle ci-dessus (ajout : $sxml->addChild('msgid', 'valeur'), modification : $sxml->msgid = 'nouvelle_valeur', suppression : unset($sxml->msgid)).

    Sinon il y a bien sûr l'extension DOM pour des besoins/structures "avancés" (cf cet article également).

  6. #6
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par redah75 Voir le message
    j'esperais qu'il ait un moyen simple pour recuperer le texte par par exemple un getElementById...
    Sans vouloir trop m'avancer, je crois que tu mélange un peu le Javascript et le PHP, car getElementById c'est du JS.

    Citation Envoyé par redah75 Voir le message
    pourquoi il ne m'affiche pas le contenu des autres elements ayant le CDATA?
    Regarde ce que j'ai écris plus haut
    Tu sais probablement que le Parser XML ignore le CDATA ?
    Apparement tu ne savais pas . Je vais me faire taper dessus, mais le parser, c'est la fonction interne à PHP qui va décortiquer ton code XML. Les CDATA sont ignorées. La "balise" CDATA permet d'évider des erreurs de lecture au Parser car il y a des caractères interdit en XML comme "&, <, #". Si tu veux mettre du code qui contient ce types de caractères tu utilise donc CDATA.
    Tu me suis ?

    Citation Envoyé par redah75 Voir le message
    deja une chose avant que j'aille plus loi: est ce que c'est possible de modifier/ajouter/supprimer UN SEUL element d'un fichier xml ??
    Je ne connais pas, mais regarde ceci xmlwriter

    PS: j'allais oublier, j'ai mis un exemple de code simpliste dans mon message précédant.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Ainsi il suffit de faire $sxml->msgid pour avoir directement la traduction du msgid voulu ($sxml étant l'objet SimpleXMLElement). ($sxml->creator par exemple)
    ah ouaiiiiisss
    j'ai modifié le fichier xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <language>
    	<a>Administration</a>
    	<b>Associated template</b>
    	<c><![CDATA[Sorting child document of %s]]></c>
    	<d><![CDATA[Load in progress]]></d>
    	<e><![CDATA[The document %s has been correctly moved to %s]]></e>
    	<f><![CDATA[Moving document]]></f>
    	<g><![CDATA[Moving template]]></g>
    	<h><![CDATA[The document type %s is not allowed in the document type %s]]></h>
    </language>
    J’ai ainsi pu facilement afficher mes textes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = simplexml_load_file("general.inc.xml") ;
    echo $xml->a ou b ou c...;
    Merci beaucoup
    une petite question, j'avais lu quelque part il y a quelque temps qu'on est pas obligé de fermer les balises et qu'on pouvais utiliser autre chose a la place, ca te dit quelque chose?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Oui  Après tout dépend de la structure retenue : la structure initiale sera plus difficile à manipuler que celle ci-dessus (ajout : $sxml->addChild('msgid', 'valeur'), modification : $sxml->msgid = 'nouvelle_valeur', suppression : unset($sxml->msgid)).
    C’est génial, merci beaucoup, je vais faire des tests et vous tiens au courant.

    Merci merci merci mille fois )

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par riete Voir le message
    Sans vouloir trop m'avancer, je crois que tu mélange un peu le Javascript et le PHP, car getElementById c'est du JS.
    hehe, pas du tout, je fais bien la distinction entre JS et le PHP, mais j'avais demande si un équivalent de getelementbyid existe )

    Regarde ce que j'ai écris plus haut
    J’avoue que je découvre un peu le XML, je ne m'en suis jamais servi. Y a un début à tout. Et fort heureusement que vous êtes la pour nous venir à l'aide

    merci en tout cas pour tout

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par riete Voir le message
    Sans vouloir trop m'avancer, je crois que tu mélange un peu le Javascript et le PHP, car getElementById c'est du JS.
    DomDocument::getElementById mais il faut ensuite que PHP ait connaissance de l'ID (via DTD par exemple).

    Citation Envoyé par redah75 Voir le message
    une petite question, j'avais lu quelque part il y a quelque temps qu'on est pas obligé de fermer les balises et qu'on pouvais utiliser autre chose a la place, ca te dit quelque chose?
    huh ? Si l'élément est vide ? (<a></a> = <a />) Sinon le document n'est pas (syntaxiquement) valide et le parser va échouer.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    huh ? Si l'élément est vide ? (<a></a> = <a />)
    ah oui c'etait ca, t'es trop fort

    je suis entrain de faire des tests pour modifier, ajouter et supprimer des element et tout marche bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $xml->addChild('z', '<![CDATA[valeur]]>');
    $xml->b = 'Ma nouvelle valeur';
    unset($xml->b);
    echo $xml->b;
    $xml->saveXML("general.inc.xml");
    le fichier .xml se presente de cette maniere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <language>
    	<a>Administration</a>
     
    	<c><![CDATA[Sorting child document of %s]]></c>
    	<d><![CDATA[Load in progress]]></d>
    	<e><![CDATA[The document %s has been correctly moved to %s]]></e>
    	<f><![CDATA[Moving document]]></f>
    	<g><![CDATA[Moving template]]></g>
    	<h><![CDATA[The document type %s is not allowed in the document type %s]]></h>
    <z>valeur</z></language>
    1- est il possible que lors dune suppression d'une ligne qu'il n'y ait pas cette ligne vide?
    2- lors d'une insertion d'un nouvel element, est il possible que </language> soit tout a la fin dans une nouvelle ligne?
    3- est il possible d'afficher les element par ordre alphabetique? (equivalent de sort() en PHP pour les array)?
    4- si je reexecute le script, l'element <z> va se recreer une autre fois, comment pourrais-je contoler ou gerer les doublons?

    Merci

  11. #11
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par redah75 Voir le message
    hehe, pas du tout, je fais bien la distinction entre JS et le PHP, mais j'avais demande si un equivalent de getelementbyid existe )
    j'avoue que je decouvre un peu le xml, je ne m'en suis jamais servi. y a un debut a tout. et fort heureusement que vous etes la pour nous venir a l'aide

    merci en tout cas pour tout
    J'espère que ce que j'ai écris t'auras quand même aidé, même si j'ai dit quelques anneries. Quelque fois on apprends soi même. J'ai trouver cette article qui introduit php/dom/xml .A+
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par riete Voir le message
    J'espère que ce que j'ai écris t'auras quand même aidé, même si j'ai dit quelques anneries. Quelque fois on apprend soi même. J'ai trouver cette article qui introduit php/dom/xml .A+
    Merci pour ce lien intéressant.
    là je me noie dans la confusion, je ne sais plus la différence entre simplexml et les DOM, autrement dit la différence entre $dom->load('fichier.xml'); et $xml = simplexml_load_file("fichier.xml");

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par redah75 Voir le message
    1- est il possible que lors dune suppression d'une ligne qu'il n'y ait pas cette ligne vide?
    2- lors d'une insertion d'un nouvel element, est il possible que </language> soit tout a la fin dans une nouvelle ligne?
    3- est il possible d'afficher les element par ordre alphabetique? (equivalent de sort() en PHP pour les array)?
    4- si je reexecute le script, l'element <z> va se recreer une autre fois, comment pourrais-je contoler ou gerer les doublons?
    1 & 2) Non parce que SimpleXML est une API simplifiée et ne comprend aucune option de formatage. Par contre, DOM, oui. Il vaudrait donc mieux, avec SimpleXML, garder un document compact (ie sans formatage).
    3) pas directement : il faut utiliser une fonction comme usort (voir cette discussion ou encore celle-ci).
    4) via isset et/ou count (isset($sxml->z) renverra vrai et count($sxml->z) renverra une valeur > 0 (donc vraie) si un élément z est déjà présent).

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    1 & 2) Non parce que SimpleXML est une API simplifiée et ne comprend aucune option de formatage. Par contre, DOM, oui. Il vaudrait donc mieux, avec SimpleXML, garder un document compact (ie sans formatage).
    Me conseilles tu alors d'avoir plutôt recours a DOM ou ca n'en vaut pas la peine???

    3) pas directement : il faut utiliser une fonction comme usort (voir cette discussion ou encore celle-ci).
    OK, je vais regarder ca de plus près!!

    4) via isset et/ou count (isset($sxml->z) renverra vrai et count($sxml->z) renverra une valeur > 0 (donc vraie) si un élément z est déjà présent).
    Merci, je ferai quelques tests.

    j'ai encore 3 autres et j'espères dernières question

    1- j'ai pour le fichier .xml la racine <translation>, est il conseille de rajouter des attributs tels que dir="ltr" ou language="fr/en/..."???

    2 est-il recommandé de mettre CDATA dans tous les éléments? Lorsque j'insère une valeur avec CDATA le "<" est remplacé par &lt; que dois je faire pour insérer le signe "<"?

    3- quelle est la meilleure manière de gérer les jours et mois?
    J’ai pense à mettre ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <translation>
    	<a>Administration</a>
            ....
    	<z>valeur</z>
    	<day1>Monday</day1>
            <day2>Tuesday</day2>
            ...
    	<month2>February</month2>
    </translation>
    puis pour l'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $jour = 1;
    $xml = simplexml_load_file("general.inc.xml") ;
    echo $xml->day.$jour;
    Mais ca marche pas

    Merci

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par redah75 Voir le message
    me conseilles tu alors d'avoir plutot recours a DOM ou ca n'en vaut pas la peine???
    Ce sera plus complexe à mettre en œuvre. Contentez-vous plutôt de SimpleXML dans un premier temps si celui-ci répond à vos attentes. Et vous pouvez éventuellement encapsuler tous vos traitements dans une classe et ainsi ne rien à avoir à réécrire si vous souhaitez par la suite en changer (mise à part la classe évidemment).

    Citation Envoyé par redah75 Voir le message
    1- j'ai pour le fichier .xml la racine <translation>, est il conseille de rajouter des attributs tels que dir="ltr" ou language="fr/en/..."???
    Si c'est nécessaire, pour vous, oui. (ex : déterminer quelle locale est utilisée bien qu'il y a d'autres moyens de procéder)

    Citation Envoyé par redah75 Voir le message
    2- est il recommandé de mettre CDATA dans tous les elements? lorsque j'insere une valeur avec CDATA le "<" est remplacé par &lt; que dois je faire pour inserer le signe "<"?
    On ne peut avoir < ni > dans un document XML, ce sont des caractères spéciaux/réservés. D'où leur remplacement (automatique) par leurs entités correspondantes lorsque l'on cherche à les y insérer (&lt;, &gt;).

    Si le but est de créer un nouvel élément, il faut le réaliser avec les fonctions (méthodes en réalité) prévues : ça ne se réalise pas en traitant les données comme une simple chaîne de caractères.

    Citation Envoyé par redah75 Voir le message
    3- quelle est la meilleure maniere de gerer les jours et mois?
    Difficile à dire : la meilleure solution est celle qui demande le moins de traitement (donc de la source).

    Ne marche pas, à réécrire en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $xml->{'day' . $jour};

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    merci infiniment
    là je viens de rentrer chez moi, je testerai le tout demain et te tiens au courant

    je vous aurais bien paye une biere pour votre aide tres precieuse
    merci encore une fois

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Ce sera plus complexe à mettre en œuvre. Contentez-vous plutôt de SimpleXML dans un premier temps si celui-ci répond à vos attentes. Et vous pouvez éventuellement encapsuler tous vos traitements dans une classe et ainsi ne rien à avoir à réécrire si vous souhaitez par la suite en changer (mise à part la classe évidemment).
    ummm, encapsuler?? je saurai jamais le faire, mais comme tu dis, je me contente de simpleXML qui fait ce que je veux faire puis en verra par la suite

    Si c'est nécessaire, pour vous, oui. (ex : déterminer quelle locale est utilisée bien qu'il y a d'autres moyens de procéder)
    j'ai une vision du future assez limitée puisque je ne maitrise pas le xml, que me conseilles tu mettre comme attributs qui peuvent s'averer utiles par la suite??

    On ne peut avoir < ni > dans un document XML, ce sont des caractères spéciaux/réservés. D'où leur remplacement (automatique) par leurs entités correspondantes lorsque l'on cherche à les y insérer (&lt;, &gt.
    oui oui je le sais, je pense que je me suis juste un peu mal exprimé. je reexplique
    quand par exemple je mets a jour l'element "c":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->c = "<a href='javascript:page.php?par1=test&par2=coucou;'>encore \"un 'autre test</a> & texte";
    voici le resultat que j'obtiens dans le fichier xml:
    <c>&lt;a href='javascript:page.php?par1=test&amp;par2=coucou;'&gt;encore "un 'autre test&lt;/a&gt; &amp; texte</c>
    puisque les caracteres interdits par xml sont automatiquement convertis en entites correspondantes, est ce bien utile de mettre les CDATA ??
    et aussi lorsque je traduis des mots pour des les boutons (valider, supprimer, ajouter au panier, ...), ce n'est pas la peine d'utiliser les CDATA aussi ?

    Difficile à dire : la meilleure solution est celle qui demande le moins de traitement (donc de la source).
    $xml->{'day' . $jour}; marche bien, merci
    penses tu que c'est une bonne methode?

    j'ai encore d'autres petites questions mais je ne te les poserai pas toutes d'un seul coup

    1- coté securite, est ce que le fichier xml est bien securise? quelles mesures prendre et quel droit (chmode) lui attribuer?

    2- concernant les langues dispo, est il mieux de creer une table avec 3 ou 4 champs (lang, disponible, traducteur, ...) ou plutot un autre fichier xml, si tu me conseilles un fichier xml, quelle structure me preconises tu?

    Merci infiniment

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par redah75 Voir le message
    j'ai une vision du future assez limitée puisque je ne maitrise pas le xml, que me conseilles tu mettre comme attributs qui peuvent s'averer utiles par la suite??
    C'est à vous de le déterminer. Et s'il y a des informations (nécessaires) à y mettre, elles devraient être très limitées.

    Citation Envoyé par redah75 Voir le message
    puisque les caracteres interdits par xml sont automatiquement convertis en entites correspondantes, est ce bien utile de mettre les CDATA ??
    et aussi lorsque je traduis des mots pour des les boutons (valider, supprimer, ajouter au panier, ...), ce n'est pas la peine d'utiliser les CDATA aussi ?
    Non, en effet. Ici, un CDATA n'est utile que lors d'une édition manuelle de votre fichier XML et que vous ne voulez pas prendre le soin de potentiellement retranscrire ces caractères en leurs entités.

    Citation Envoyé par redah75 Voir le message
    $xml->{'day' . $jour}; marche bien, merci
    penses tu que c'est une bonne methode?
    J'y ai déjà répondu : ça dépend de la source. Pourquoi pas, et ça reste aisé à gérer par rapport à une solution comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <day>Dimanche</day>
        <day>Lundi</day>
        <day>Mardi</day>
        <!-- ...  -->
    ($sxml->day[1] pour Lundi)

    Citation Envoyé par redah75 Voir le message
    1- coté securite, est ce que le fichier xml est bien securise? quelles mesures prendre et quel droit (chmode) lui attribuer?
    Comme tout fichier : 0666 si Apache/PHP n'est pas propriétaire du fichier. Et question sécurité tout dépend aussi de la manière dont on l'utilise : tant qu'il n'y a pas d'eval de son contenu, ça reste assez limité.

    Citation Envoyé par redah75 Voir le message
    2- concernant les langues dispo, est il mieux de creer une table avec 3 ou 4 champs (lang, disponible, traducteur, ...) ou plutot un autre fichier xml, si tu me conseilles un fichier xml, quelle structure me preconises tu?
    Ça dépend du besoin et de l'usage. Mais une base de données serait probablement un peu casser la fonction du XML jusque là, à moins qu'il y ait relation avec d'autres données. Voir si aussi on peut se contenter d'un accès direct à la traduction (type gettext) : j'imagine qu'on peut facilement retrouver les langues disponibles en parcourant le ou les répertoires où elles sont entreposées et s'il y a besoin d'informations complémentaires, les placer dans le XML (on en revient à la première question).

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    merci encore une fois pour toutes ces reponses bien detaillees et completes!!

    J'y ai déjà répondu : ça dépend de la source. Pourquoi pas, et ça reste aisé à gérer par rapport à une solution comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <day>Dimanche</day>
        <day>Lundi</day>
        <day>Mardi</day>
        <!-- ...  -->
    ($sxml->day[1] pour Lundi)
    ah c'est pas mal ca, je ne savait pas qu'on pouvait faire ca... j'aimerai bien utiliser cette methode qui est tres emblable aux tableau php mais ca peut ne plus fonctionner si l'ordre est changé lors d'une mise a jour du fichier xml par une interface que je creerai par la suite... non??

    Ça dépend du besoin et de l'usage. Mais une base de données serait probablement un peu casser la fonction du XML jusque là, à moins qu'il y ait relation avec d'autres données. Voir si aussi on peut se contenter d'un accès direct à la traduction (type gettext) : j'imagine qu'on peut facilement retrouver les langues disponibles en parcourant le ou les répertoires où elles sont entreposées et s'il y a besoin d'informations complémentaires, les placer dans le XML (on en revient à la première question).
    la seule relation qu'il peu y avoir c'est l'identifiant du traducteur qui sera stocké dans une autre table "clients/membres", a part ca, j'aurai juste besoin de la date de traduction et si la traduction est finie et validée ou pas!! je ne sais toujours pas quoi faire! que ferai tu a ma place?

    2 dernieres questions stp
    j'ai un dossier lang qui contient des sous-dossiers "en", "fr", ...
    puis dans le dossier "fr" par exemple, j'ai divisé le fichier .xml en 4 fichiers:
    - buttons.inc.xml
    - emails.inc.xml
    - errors.inc.xml
    - general.inc.xml
    - texts.inc.xml
    afin d'inclure que les fichiers dont la page aurait besoin et ne pas avoir un seul fichier surchargé.

    1- approuves tu ce choix?
    2- pour ajouter une nouvelle langue, est il mieux de creer ces 5 fichiers manuellement, devrais je les pre-remplir avec les elements sans contenu (<a></a>, <b></b>, ...) puis proceder a la traduction via une interface??
    quelle technique preconises tu?

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par redah75 Voir le message
    ah c'est pas mal ca, je ne savait pas qu'on pouvait faire ca... j'aimerai bien utiliser cette methode qui est tres emblable aux tableau php mais ca peut ne plus fonctionner si l'ordre est changé lors d'une mise a jour du fichier xml par une interface que je creerai par la suite... non??
    C'est sûr que c'est plus pratique à l'utilisation mais, comme je cherchais à le dire, la gestion serait plus difficile puisque l'on introduit alors un cas particulier. Pour en modifier le texte, par exemple, on n'utilise plus $sxml->day1 = ... mais $sxml->day[1] ... Même chose pour la suppression (unset($sxml->day[1])).

    Citation Envoyé par redah75 Voir le message
    la seule relation qu'il peu y avoir c'est l'identifiant du traducteur qui sera stocké dans une autre table "clients/membres", a part ca, j'aurai juste besoin de la date de traduction et si la traduction est finie et validée ou pas!! je ne sais toujours pas quoi faire! que ferai tu a ma place?
    Base de données alors en ce cas.

    Citation Envoyé par redah75 Voir le message
    1- approuves tu ce choix?
    Si la volumétrie des données le justifie et que ça n'en complique pas la gestion : oui.

    Citation Envoyé par redah75 Voir le message
    2- pour ajouter une nouvelle langue, est il mieux de creer ces 5 fichiers manuellement, devrais je les pre-remplir avec les elements sans contenu (<a></a>, <b></b>, ...) puis proceder a la traduction via une interface??
    quelle technique preconises tu?
    Ce n'est pas forcément le meilleur outil de ce point de vue (gettext par exemple) ... L'un dans l'autre, je pense, ça revient au même : il faut juste s'assurer si une traduction incomplète puisse tout de même être utilisée qu'il y ait quand même quelque chose d'afficher au client qui soit exploitable (l'élément n'existe pas - isset - et/ou il est vide - empty). Ici, l'inconvénient étant que le msgid est plutôt court et pas réellement représentatif de la chaîne à traduire. L'idéal serait peut être alors d'effectuer une simple copie des documents les plus à jour puis d'en effectuer la traduction.

Discussions similaires

  1. [SimpleXML] Configuration de php5 pour le XML
    Par hom dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 21/07/2006, 19h52
  2. [PHP5/simpleXML] Gros Fichiers
    Par vanilla dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 26/06/2006, 19h40
  3. [SimpleXML] Problème PHP5/XML pour des affichages particuliers
    Par vanilla dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 20/04/2006, 13h22
  4. Réponses: 3
    Dernier message: 23/08/2004, 17h49

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