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 :

Lecture d'un fichier XML


Sujet :

Langage PHP

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Par défaut
    C'est juste le nom des alertes que j'ai changé, sinon le code exact que j'ai actuellement c'est ça :

    Pour la version non optimisée mais qui marche:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    $rouge=false;
    	$orange=false;
    	$xml = new DomDocument();
    	$xml->preserveWhiteSpace = FALSE;
    	$xml->load('xml/Alarmes/Alarmes.xml');
    	foreach($xml->getElementsByTagName('Des') as $Des){
    		if($Des->nodeValue=='1'){
    			$rouge=true;}
    	}
    	foreach($xml->getElementsByTagName('Chauffage_nok') as $Chauffage_nok){
    		if($Chauffage_nok->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('Choc') as $Choc){
    		if($Choc->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('Ouv_Porte') as $Ouv_Porte){
    		if($Ouv_Porte->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('Ouv_Porte_Dep') as $Ouv_Porte_Dep){
    		if($Ouv_Porte_Dep->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('Secteur_nok') as $Secteur_nok){
    		if($Secteur_nok->nodeValue=='1'){
    			$rouge=true;}
    	}
    	foreach($xml->getElementsByTagName('Batterie_nok') as $Batterie_nok){
    		if($Batterie_nok->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('HD25') as $HD25){
    		if($HD25->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('HD35') as $HD35){
    		if($HD35->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('HD45') as $HD45){
    		if($HD45->nodeValue=='1'){
    			$orange=true;}
    	}
    	foreach($xml->getElementsByTagName('Ra_nok') as $Ra_nok){
    		if($Ra_nok->nodeValue=='1'){
    			$rouge=true;}
    	}
    	foreach($xml->getElementsByTagName('Ca_nok') as $Ca_nok){
    		if($Ca_nok->nodeValue=='1'){
    			$rouge=true;}
    	}
    	foreach($xml->getElementsByTagName('Soft_nok') as $Soft_nok){
    		if($Soft_nok->nodeValue=='1'){
    			$rouge=true;}
    	}
    	foreach($xml->getElementsByTagName('Alr_Box_nok') as $Alr_Box_nok){
    		if($Alr_Box_nok->nodeValue=='1'){
    			$rouge=true;}
    	}
    	if($rouge){
    				echo 'feu rouge';
    			  }
    	elseif($orange){
    				echo 'feu orange';
    			  }
    		else{
    				echo 'feu vert';
    			}
    version optimisée mais qui déconne:
    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
    32
    33
    34
    $dom = new DomDocument;
    $dom->preserveWhiteSpace = FALSE;
    $dom->load('xml/Alarmes/Alarmes.xml');
    #$dom->loadXML($xml);
    $rouge = $orange = $vert = 0;
    $assoc = array(
    	'Des' => 'rouge',
    	'Chauffage_nok' => 'orange',
    	'Choc' => 'orange',
    	'Ouv_Porte' => 'orange',
    	'Ouv_Porte_Dep' => 'orange',
    	'Secteur_nok' => 'rouge',
    	'Batterie_nok' => 'rouge',
    	'HD25' => 'orange',
    	'HD35' => 'orange',
    	'HD45' => 'orange',
    	'Ra_nok' => 'rouge',
    	'Ca_nok' => 'rouge',
    	'Soft_nok' => 'rouge',
    	'Alr_Box_nok' => 'rouge'
    );
    foreach ($dom->documentElement->childNodes as $c) {
        if (isset($assoc[$c->nodeName]) && $c->nodeValue == '1') {
            ${$assoc[$c->nodeName]}++;
        }
    }
     
    if ($rouge) {
        echo'feu rouge';
    } elseif ($orange) {
        echo 'feu orange';
    } else {
        echo 'feu vert';
    }

  2. #22
    Membre expérimenté

    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
    Par défaut
    Pouvez-vous fournir un de vos vrais fichiers XML également ?

  3. #23
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Pardonnez moi de m’imiscer dans un langage que je ne connais pas beaucoup.



    Pourquoi ne faites vous pas une recherche directe de motif dans le texte XML, au lieu de transiter par une traduction du fichier en nœuds préalablement à la détection ?



    Puisque le contenu du fichier XML ne comporte pas des alertes sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      	<alerte>0</alerte>
      	<alerte>1</alerte>
      	<alerte>0</alerte>
    ce qui aurait bien simplifié les choses en permettant de rechercher directement “<alerte>1</alerte>“ ,


    mais sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       	<alerte1>0</alerte1>
      	<alerte2>1</alerte2>
      	<alerte3>0</alerte3>
    la recherche d’une alerte 1 peut se faire par expression régulière
    avec une RE = ’<alerte\d+>1</alerte\d+>’
    me semble-t-il.

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Par défaut
    Julp voici mon 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
    <csa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
    	<Alarmes>
    			<Des>0</Des>
    			<Chauffage_nok>0</Chauffage_nok>
    			<Choc>0</Choc>
    			<Ouv_Porte>0</Ouv_Porte>
    			<Ouv_Porte_Dep>0</Ouv_Porte_Dep>
    			<Secteur_nok>0</Secteur_nok>
    			<Batterie_nok>1</Batterie_nok>
    			<HD_25>0</HD_25>
    			<HD_35>0</HD_35>
    			<HD_45>0</HD_45>
    			<Ra_nok>0</Ra_nok>
    			<Ca_nok>0</Ca_nok>
    			<Soft_nok>0</Soft_nok>
    			<Alr_Box_nok>0</Alr_Box_nok>
    	</Alarmes>
    </csa>
    eyquem en fait mes alarmes dans mon premier post étaient nommées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <alerte1>0</alerte1>
    <alerte2>1</alerte2>
    <alerte3>0</alerte3>
    en exemple (pensant simplifier les chose),
    comme vous pouvez le voir ci-dessus et dans mon post précédent mes alarmes ont en fait des noms bien différents.

  5. #25
    Membre expérimenté

    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
    Par défaut
    Forcément que ça ne marchait pas puisqu'il y avait un niveau de plus (Alarmes) entre vos différentes "alertes" et la racine.

    Pour la version SimpleXML, il suffit de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($sxml->children() as $c) {
    En :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($sxml->Alarmes->children() as $c) {
    Pour la version DOM, avec $dom->preserveWhiteSpace = FALSE; il suffit normalement de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($dom->documentElement->childNodes as $c) {
    En :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($dom->documentElement->firstChild->childNodes as $c) {

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Par défaut
    Ok, merci Beaucoup !

    La version SimpleXML marche niquel en revanche pour la version DOM ça n'affiche toujours que le feu vert.

    Tu m'enlèves une épine du pied et je me coucherai moins bête ce soir. Merci beaucoup à toi et tout le monde, vous avez été particulièrement patients J'ai encore du boulot pour maitriser le XML mais ça va rentrer...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème de lecture d'un fichier XML d'InfoPath
    Par snadus dans le forum InfoPath
    Réponses: 7
    Dernier message: 06/06/2006, 15h45
  2. Lecture d'un fichier XML de config avec Java
    Par cofy dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 31/01/2006, 16h54
  3. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 01h13
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 13h04
  5. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2005, 09h57

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