Logo du forum
 

Forum TT-Hardware

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [XML/XSL] » Se déplacer dans les noeuds en fonction des valeurs des attributs
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )

Auteur
Sujet : Se déplacer dans les noeuds en fonction des valeurs des attributs
Zéphyr



 






Message du 24-04-2007 @ 16:03


Bonjour,

Je cherche un moyen de me déplacer dans mon arboresence en fonction des valeurs des attributs. Par exemple comment me déplacer dans "http://tools.fr", "index.html", "longueur-titre" ?

Code :

<site nom="tools" url="http://tools.fr">
      <page adresse="index.html">
         <test nom="longueur-titre">
            <resultat id="1" j="14/02/2007" h="15:02">mptools valide groups</resultat>
            <resultat id="2" j="10/02/2007" h="15:02">mptools non valide</resultat>
         </test>
         <test nom="titre-repet-mot">
            <resultat id="3" j="14/02/2007" h="15:02">mptools valide</resultat>
            <resultat id="4" j="10/02/2007" h="15:02">mptools valide</resultat>
         </test>
         <test nom="indice-popularite">
            <resultat id="5" j="14/02/2007" h="15:02" moteur="google">mptools 4</resultat>
            <resultat id="6" j="10/02/2007" h="15:02" moteur="yahoo">mptools 3</resultat>
         </test>
      </page>
</site>



Merci d'avance pour votre aide. ;)

[message édité le 24-04-2007 @ 17:02 Par Zéphyr]

- Haut de page -
Chani



 






Message du 24-04-2007 @ 16:51

et bien un explorarateur de fichier XML sais le faire.. nan ?

Tu veux pouvoir le faire avec quoi ? avec un explorateur standard ? Tu peux lui associer une feuille de style pour n'afficher que ecrtain renseignements .. ou alors si tu veux que ce soit dynamique, il te faudra forcément un langage de script derrière.
- Haut de page -
Zéphyr



 






Message du 24-04-2007 @ 16:59

Ah ouais j'ai ptet un peu vague, mais quand on est dans le truc ça parait évident. :D

J'utilise DOM et PHP, et donc j'aimerais me déplacer dans le bon noeud pour créer des fils par exemple.

- Haut de page -
Chani



 






Message du 24-04-2007 @ 17:11

Quelle version de PHP tu utilise ? si tu utilise PHP5, tu peux utiliser simple XML pour filtrer et gérer grace à PHP...

DOM est plus long à utiliser, et plus enquiquinant :D... pour pas être grossier. Si tu veux j'ais un ou deux exemple de filtre que j'utilise grâce à simple XML, je t'en ferais part si tu veux ;)
- Haut de page -
Zéphyr



 






Message du 24-04-2007 @ 18:11

Chani a écrit

Quelle version de PHP tu utilise ? si tu utilise PHP5, tu peux utiliser simple XML pour filtrer et gérer grace à PHP...

DOM est plus long à utiliser, et plus enquiquinant :D... pour pas être grossier. Si tu veux j'ais un ou deux exemple de filtre que j'utilise grâce à simple XML, je t'en ferais part si tu veux ;)



J'utile PHP5, et bien évidemment tes exemples m'intéressent. ;)

- Haut de page -
Chani



 






Message du 25-04-2007 @ 9:23

Alors dans un premier temps... il te faut lire le fichier XML (enfin créer une référence un objet avec ton fichier XML) :

Code :

function read_xml($path, $nof) {
      $contenu='';
      $fichier=$path.'/'.$nof.'.xml';
      $contenu=simplexml_load_file($fichier) or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
      if ($contenu<>false) {
         $this->resultat=$contenu;
         return true;
      }
      else {
         return false;
      }
      
   }



Ensuite tu peux utiliser l'objet pour lui appliquer des filtres successif (enfin au moins lui demander d'afficher les noeuds dispos à certain chemin)
Code :

/*
* fonction de traitement des informations des pages
*/
function trait_page ($xml, $nro) {
   $cat='// page [@numero = '.$nro.'] /section';
   $i=0;
   foreach ($xml->xpath($cat) as $niveau) {
         
      $type=(string)$niveau['type'];      // remplissage du type de page
      $info=(string)$niveau['info'];      // récupération du type de source de données dans le cas d'un formulaire
      $source=(string)$niveau['source'];   // récupération du nom de la source de donnée.
      $cat2='// page [@numero = '.$nro.'] /section/champ';
      foreach ($niveau->xpath($cat2) as $niveau2) {
            $this->resultat2[$i]['type']=$type;         // remplissage du type de page
            $this->resultat2[$i]['info']=$info;         // remplissage du nom de la table pour une source bdd
            $this->resultat2[$i]['source']=$source;      // remplissage de la source de données
            $this->resultat2[$i]['typec']=(string)$niveau2['type'];      //remplissage du type de champs
            $this->resultat2[$i]['champ']=(string)$niveau2['chp'];      //remplissage du nom de champs
            $this->resultat2[$i]['numero']=(string)$niveau2->numero;   //remplissage du numéro de la traduction
            
            $i++;
      }
   }
       
}


Voici juste le code qui appel successivement ces deux fonctions :

Code :

$this->read_xml($rq1, $rq2);      // path, nof         
         $this->trait_page ($this->resultat, $rq3);



et voici un exemple de fichier XML que j'utilise : (page.xml)
Code :

<?xml version='1.0' standalone='yes'?>
<pages>
   <page numero='1'>
      <section type='texte' info='table' source='test'>
         <champ type='title1'>
            <numero>2</numero>
         </champ>
         <champ type='para'>
            <numero>3</numero>
         </champ>
         <champ type='title1'>
            <numero>4</numero>
         </champ>
         <champ type='para'>
            <numero>5</numero>
         </champ>
         <champ type='title2'>
            <numero>6</numero>
         </champ>
      </section>
   </page>
   <page numero='2'>
      <section type='form' info='table' source='test'>
         <champ type='form'>
            <numero>1</numero>
         </champ>
         <champ type='int'>
            <numero>1</numero>
         </champ>
         <champ type='char'>
            <numero>1</numero>
         </champ>
         <champ type='fix'>
            <numero>1</numero>
         </champ>
         <champ type='id'>
            <numero>1</numero>
         </champ>
         <champ type='bpok'>
            <numero>1</numero>
         </champ>
         <champ type='bpnok'>
            <numero>1</numero>
         </champ>
      </section>
   </page>
   <page numero='11'>
      <section type='form' info='table' source ='test'>
         <champ type='charl' chp=''>
            <numero>20</numero>
         </champ>
         <champ type='charl' chp=''>
            <numero>21</numero>
         </champ>
         <champ type='bpok'>
            <numero>22</numero>
         </champ>
         <champ type='bpnok'>
            <numero>23</numero>
         </champ>
      </section>
   </page>
   <page numero='40'>
      <section type='tableau' info='table' source='test'>
         <champ type='tableau' chp=''>
            <numero>18</numero>
         </champ>
      </section>
   </page>
</pages>



vla si t'as des questions ;)
- Haut de page -
Zéphyr



 






Message du 25-04-2007 @ 10:18

Finalement j'ai utilisé XPATH, parati que c'est tout con, mais je suis novice dans le domaine. :)

Code :

//Création d'un objet xpath utilisé pour naviguer dans l'arborescence du fichier xml
$xpath = new DOMXPath($docXml);

//définition du chemin xpath à parcourir dans le fichier XML
$query = "//site[@nom='$nomSite']/page[@adresse='$pageCourante']/test[@nom='$nomTest']";
$noeud = $xpath->query($query); //récupération du noeud correspondant au xpath



Mais merci quand même pour tes exemples ! Je les regarderai pour en connaître un peu plus du XML. :)

- Haut de page -
Chani



 






Message du 25-04-2007 @ 14:03

ba j'utilise aussi xpath mais sur un objet simplexml ;)
- Haut de page -

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2006

Valid XHTML 1.0 Transitional

Page générée en 0.092 secondes