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 :

Comment optimiser DOMDocument xml


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 744
    Par défaut Comment optimiser DOMDocument xml
    bonjour,
    a chaque fois j'utilise un foreach mais comment eviter ça pour lire les élément enfants title et texte ?
    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
     
    $pathImage = 'products/images/';
            $xmldatas = new DOMDocument();
            $xmldatas->load(PATH_PRODUCTS . '/products.xml');
            $xmldatas = $xmldatas->getElementsByTagName("product");
            foreach ($xmldatas as $product) {
                echo $product->getAttribute('image');
               $trans = $product->getElementsByTagName('translation');
                foreach ($trans as $tr) {
                    echo getAttribute('lang');
                        $title = $tr->getElementsByTagName('title');
                        foreach ($title as $t) {
                            echo $t->nodeValue ;
                        }
                        $text = $tr->getElementsByTagName('text');
                        foreach ($text as $txt) {
                            echo $txt->nodeValue;
                        }
                }
            }
    voici fichier xml
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <products>
        <product id="1" image="thumb-square-1.jpg">
            <translation lang="fr">
                <title>La box</title>
                <text>
                    <![CDATA[
     
                ]]>
                </text>
                <lien>lien 1</lien>
            </translation>
        </product>
        <product id="2" image="thumb-square-2.jpg">
            <translation lang="fr">
                <title>Tablette</title>
                <text>
                    <![CDATA[
     
                ]]>
                </text>
                <lien>lien 1</lien>
            </translation>
        </product>
    </products>

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Si tu n'as qu'une seule balise title par translation, tu peux accéder directement au 1er élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $title = $tr->getElementsByTagName('title');
    $t = $title->item(0);
    echo $t->nodeValue ;
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Si tu veux atteindre tes balises title en t'assurant qu'elles sont bien les descendantes directes de translation lui même descendant direct de product, tu peux utiliser XPath qui permet de décrire un chemin dans l'arbre DOM:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $dom = new DOMDocument;
    $dom->load(PATH_PRODUCTS . 'products.xml');
     
    $xp = new DOMXPath($dom);
     
    $titles = $xp->query('//product/translation/title');
     
    foreach($titles as $title) {
       echo $title->nodeValue . PHP_EOL;
    }
    Si tu sais pertinemment où que les balises title ont toujours les mêmes ancêtres et qu'on n'en trouve pas ailleurs dans l'arbre DOM, dans ce cas utiliser XPath n'est pas utile, et la solution de Celira est plus simple.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 744
    Par défaut
    merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM XML] Domdocument xml et tableau : comment faire un tri ?
    Par youtch dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/03/2009, 14h37
  2. [XSLT] Comment optimiser les traitements XML/XSL ?
    Par thibaut06 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/03/2006, 16h39
  3. [DOM] En java comment charger un XML en dynamique via un filtre
    Par fbertoux dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/12/2004, 18h35
  4. Comment optimiser une jointure ?
    Par seb_asm dans le forum Administration
    Réponses: 21
    Dernier message: 25/06/2004, 16h42
  5. Réponses: 3
    Dernier message: 27/01/2004, 16h15

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