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

Bibliothèques et frameworks PHP Discussion :

[XML] [EXPAT] Balise fermante


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut [XML] [EXPAT] Balise fermante
    Bonjour,

    je débute en php et j'aimerais parser un fichier xml afin d'insérer son contenu dans une BDD.
    Malheureusement je me suis heurté à un problème dont je n ai trouvé la solution nulle part.
    Je parse le fichier XML disponible par une url bien précise, je le parcours , je mets les infos dans un tableau, jusque là tout se passe bien , mais au moment d'arriver à une balise de type :

    <row typeID="3436" skillpoints="250" level="1" />

    il m'appelle la fonction de balise fermante "function endElement($parser, $name)" donc je ne peux pas accéder aux attributs de cette balise

    Voila le code en question (il est pas tres propre , mais je débute ^^)

    Ha et je tourne en php4

    Merci d'avance !

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    <?
     
     
    $fp = fopen("http://api.eve-online.com/char/CharacterSheet.xml.aspx?characterID=701567533&userid=2128249&apikey=UDV5n0UMpIvta0ghPgO5hKew3gwnxSyTvI3EIOXDSf3mVBHwpxZFeG3fxQzT2iLW","r");
    $xml_parser=xml_parser_create();
    $perso=array();
     
     
    // Définitions des fcts utilisées lors de la présence d'un élément ( 2 fcts , open et close) ou d'une donnée (data)
    xml_set_element_handler($xml_parser, "startElement", "endElement");
    xml_set_character_data_handler($xml_parser, "characterData");
     
    function startElement($parser, $name, $attrs)
    {
    global $perso;
    global $position;
     
    $position = $name;
     
    }
     
    function characterData($parser, $data)
    {
     
    global $position;
    global $perso;
     
    if($position =="CORPORATIONNAME")
    {
    if(!($data=="\n")) $perso["CORPO"] = $data;
     
    }
    if($position =="NAME" || $position =="RACE" ||$position =="BLOODLINE" ||$position =="GENDER" ||$position =="BALANCE" || $position =="INTELLIGENCE" || $position =="MEMORY" || $position =="CHARISMA" || $position =="PERCEPTION" || $position =="WILLPOWER" )
    {
     
    if(!($data=="\n")) $perso[$position] = $data;
     }
     
     
     
    }
     
    function endElement($parser, $name)
    {
     echo $name.'<br>';
    }
     
     
    if ($fp)
    {
     
     
    while ($data = str_replace("\n","",fread($fp, 4096)))
    {
     if ( !xml_parse($xml_parser, $data, feof($fp)) )
     {
      $err=1;
      break;
     }
     
    }
     xml_parser_free($xml_parser);
     
    echo 'Infos perso<br>';
    echo 'Name : '.$perso["NAME"];
    echo '<br>';
    echo 'Race : '.$perso["RACE"];
    echo '<br>';
    echo 'Bloodline : '.$perso["BLOODLINE"];
    echo '<br>';
    echo 'Gender : '.$perso["GENDER"];
    echo '<br>';
    echo 'Corpo : '.$perso["CORPO"];
    echo '<u><br> Attributs : <br></u>';
    echo 'Intelligence : '.$perso["INTELLIGENCE"];
    }
     
    ?>

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 680
    Par défaut
    je viens d'essayer ton code et il fonctionne très bien
    tu as les informations que tu cherches dans la variable "$attrs" de la fonction "startElement"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut
    Oui j arrive a récuperer les attributs d'une balise ouvrante grâce à startElement ,comme celle ci par exemple :
    <rowset name="skills" key="typeID" columns="typeID,skillpoints,level,unpublished">

    mais dans le cas d'une balise comme ca ( ouvrante/fermante ? ):
    <row typeID="3436" skillpoints="250" level="1" />

    Il m'appelle la fonction endElement($parser, $name) avec laquelle je n'ai pas accès aux attributs

    J'espere que c est plus clair , désolé ^^

    EDIT : pour le vérifier j'ai placé un echo $name dans la fonction startElement , et la balise ROW n y apparait pas, par contre qd je fais un echo $name dans endElement , elle y apparait

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 680
    Par défaut
    tu as peut-être une version d'expat avec un bug
    essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function startElement($parser, $name, $attrs)
    {
    	global $perso;
    	global $position;
     
    	$position = $name;
     
    	echo "Ouverture : $name<br/>";
    	echo '<pre>';
    	print_r($attrs);
    	echo '</pre>';
    }
    j'ai testé avec un fichier à la place de l'URL avec le contenu suivant :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version='1.0' encoding='UTF-8'?>
    <eveapi version="1">
    	<rowset name="skills" key="typeID" columns="typeID,skillpoints,level,unpublished">
    		<row typeID="3436" skillpoints="250" level="1"/>
    	</rowset>
    </eveapi>
    et j'obtiens ce résultat :
    Code x : 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
    Ouverture : EVEAPI
    
    Array
    (
        [VERSION] => 1
    )
    
    Ouverture : ROWSET
    
    Array
    (
        [NAME] => skills
        [KEY] => typeID
        [COLUMNS] => typeID,skillpoints,level,unpublished
    )
    
    Ouverture : ROW
    
    Array
    (
        [TYPEID] => 3436
        [SKILLPOINTS] => 250
        [LEVEL] => 1
    )
    
    Fermeture : ROW
    Fermeture : ROWSET
    Fermeture : EVEAPI

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut
    ha ben apres relancé easyphp ca marche avec ta méthode

    merci pour le coup de main

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/01/2019, 08h58
  2. xml et balise auto-fermante
    Par zozizozu dans le forum Général Python
    Réponses: 1
    Dernier message: 31/08/2010, 16h52
  3. Requete FOR XML EXPLICIT - Balise fermante en trop
    Par Gipipi dans le forum Développement
    Réponses: 6
    Dernier message: 28/07/2010, 17h00
  4. [XML] Imbrication balises/texte
    Par bourbaki2003 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 10/11/2004, 18h00
  5. generer xsl depuis xml avec balises inconues ?
    Par cedre dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 24/06/2003, 09h00

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