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

Caml Discussion :

extraire les données d'un fichier.xml en Listes


Sujet :

Caml

  1. #1
    Candidat au Club
    Femme Profil pro
    étudiante en informatique
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiante en informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut extraire les données d'un fichier.xml en Listes
    Bonjour , j'ai un projet à faire en Ocaml , mais je n'ai pas su faire quelques trucs ....
    le but de mon projet est de réaliser un logiciel de rendu ( ou renderer ) de cartes en OCaml, capable de lire un fragment de carte au format XML standard d'OpenStreetMap et de l'afficher à l'ecran en utilisant des primitives portables de dessin.

    j'ai un exemple d'un fichier.osm : de galerie lafayette.osm :
    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"?>
    <osm version="0.6" generator="CGImap 0.0.2">
     <bounds minlat="39.7492900" minlon="-104.9737800" maxlat="39.7525610" maxlon="-104.9693810"/>
     <node id="1321042431" lat="39.7519707" lon="-104.9739674" user="StellanL" uid="28775" visible="true" version="1" changeset="8411074" timestamp="2011-06-11T23:41:37Z"/>
     <node id="176096518" lat="39.7507340" lon="-104.9708826" user="StellanL" uid="28775" visible="true" version="6" changeset="8411074" timestamp="2011-06-11T23:41:39Z"/>
     <node id="176071903" lat="39.7532291" lon="-104.9696574" user="StellanL" uid="28775" visible="true" version="5" changeset="8411074" timestamp="2011-06-11T23:41:45Z"/>
     <node id="176085445" lat="39.7664884" lon="-104.9733488" user="DavidJDBA" uid="139555" visible="true" version="10" changeset="6591862" timestamp="2010-12-09T04:43:03Z"/>
     <node id="176085406" lat="39.7477190" lon="-104.9727580"

    voici ce que j'ai fait :
    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
    #directory "+xml-light";;
    #load"xml-light.cma";;
     
    let x = parse_file" 01_denver_lafayette.osm";;
     
      type xml =
    | element of (string * string) list * xml list)
    |PCData of string
     
    type node ={ id : int ; lan : int ; lon int }
    type bounds_of_xml = { minlan : string ; minlon:string ; maxlan : string ; maxlon : string }
     
    let bounds_of_xml = function
    |Xml.Element("minlan" ,[],[])->Xml.Element.Bounds.minlan
    |Xml.Element("minlan" ,[],[])->Xml.Element.Bounds.minlan

    Donc ça m'affiche des erreurs !!
    je veux extraire les données de ce fichier .Osm ( que j'ai déjà parsé) et les mettre dans des listes
    par ex : pour bounds ( dans le fichier .Xml ) contient 4 informations : minlan , minlon , maxlan , maxlon. et il n'y a qu'un seul " BOUNDS " dans le fichier ( pas la peine d'utiliser une fonction récursive !!)



    comment faire pour extraire ces données ? dont j'aurai besoin après pour dessiner .


    Merci.

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    D'abord une remarque sur la forme : merci d'utiliser les balises de code pour augmenter la lisibilité de ton message. La lisibilité, c'est pas pour le fun, c'est pour ceux qui, comme moi, se penchent sur ton problème pour t'aider !

    Concernant ton problème : la première chose à faire, me semble-t-il, c'est de regarder la documentation du fichier xml-light/xml.mli et, en parallèle, examiner attentivement la valeur renvoyée par Xml.parse_file "01_denver_lafayette.osm". De cette façon, tu peux facilement trouver comment extraire les informations qui t'intéressent. Ta fonction bounds_of_xml indique que tu n'as pas bien compris où chercher minlan.

    En clair, tu as besoin de manipuler le constructeur Xml.Element. La documentation du fichier xml.mli en précise la syntaxe : Xml.Element (tag-name, attributes, children). Dans ton cas, le champ tag-name te permet de savoir si tu es en présence de "bounds" ou "node", et attributes contient toutes les données que tu souhaites extraire (par exemple id, lat, lon, etc.).

    Quelques petites questions auxiliaires :

    • Je suis étonné que tu donnes à lat et lon un type entier ; pourquoi pas des flottants (type float) ?


    • Pourquoi redéfinir un type xml dans ton fichier ?


    • Tu nous dit que ton code donne des erreurs, mais tu ne nous dis pas lesquelles. En général il est préférable de bien détailler les messages d'erreur du compilateur, ça nous donne des pistes pour t'aider. Ici c'est assez flagrant (par exemple Xml.Element.Bounds.minlan ne veut rien dire).

    Je te donne un code qui fonctionne bien, je te laisse le soin de l'analyser pour l'adapter ensuite à tes besoins :

    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
    type node = {id : int; lat : float; lon : float}
    type bounds = {minlat : float; minlon : float; maxlat : float; maxlon : float}
    
    type my_data = Bounds of bounds | Node of node 
    
    let float_assoc x y = float_of_string (List.assoc x y)
    
    let extract_node attr = Node {
      id = int_of_string (List.assoc "id" attr);
      lat = float_assoc "lat" attr;
      lon = float_assoc "lon" attr }
    
    let extract_bounds attr = Bounds {
      minlat = float_assoc "minlat" attr;
      minlon = float_assoc "minlon" attr;
      maxlat = float_assoc "maxlat" attr;
      maxlon = float_assoc "maxlon" attr }
    
    let extract_data acc = function
      | Xml.Element ("bounds", attr, _) -> extract_bounds attr :: acc
      | Xml.Element ("node", attr, _) -> extract_node attr :: acc
      | _ -> acc
    
    let extract file =
      match Xml.parse_file file with
      | Xml.Element ("osm", _, children) -> List.fold_left extract_data [] children
      | _ -> invalid_arg "Missing XML element 'osm'."
    Cordialement,
    Cacophrène

  3. #3
    Candidat au Club
    Femme Profil pro
    étudiante en informatique
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiante en informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    bonsoir, merci de votre réponse.
    en fait ce programme fonctionne bien, mais quand j'ai essayé de le tester, en faisant appel à extract avec le nom de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     extract 01_denver_lafayette.osm;;

    je n'ai pas compris pourquoi il m'affiche cette erreur! :
    this argument will not be used by the function.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val extract  'a ->my_data list <fun>.

  4. #4
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Citation Envoyé par Hatixhe
    en fait ce programme fonctionne bien, mais quand j'ai essayé de le tester, en faisant appel à extract avec le nom de fichier (...) je n'ai pas compris pourquoi il m'affiche cette erreur! : this argument will not be used by the function.
    Testé dans l'interpréteur ? Difficile de répondre dans ces conditions. La fonction extract que j'ai écrite dans mon précédent message a la signature suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val extract : string -> my_data list
    Je suis très étonné que cela puisse conduire à ce type d'erreur... Il me faudrait plus d'infos, en l'état actuel je ne comprends pas ce qui ne va pas.

    Cordialement,
    Cacophrène

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Les guillemets oubliés autour de la chaîne. C'est

  6. #6
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Effectivement c'est une erreur assez... élémentaire. S'il n'y avait pas de chiffres, on aurait eu seulement "unbound value foo". Sauf que là il y a des chiffres, d'où 2 arguments et l'erreur "will not be used by the function". D'ailleurs les messages ont un peu changé avec la version 3.12.0, j'obtiens "this function is applies to too many arguments".

    Bref, pour de tels erreurs de syntaxe, soit c'est un moment d'inattention, soit il faut vraiment penser à revenir aux fondamentaux.

    Cordialement,
    Cacophrène

  7. #7
    Candidat au Club
    Femme Profil pro
    étudiante en informatique
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiante en informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    j'ai modifié le type de " id " dans Node , du coup ça marche ^^, merciii...
    au fait , j'ai rajouté un autre type " ways " , et une fonction "extract_ways" ::


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type typeway = { highway : string ; building : string ; water : string }
    type ways = { id : int32 ; tw : typeway }
     
     
    let extract_ways attr = Way {
    id = of_string(List.assoc "id" attr);
    tw.highway = float_assoc tw."highway" attr}


    il m'affiche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tw.highway = float_assoc tw."highway" attr
       ^
     
    error : syntax error.

    j'ai réessayé de mettre un x au lieu de tw :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let extract_ways attr = Way {
    id = of_string(List.assoc "id" attr);
    x = float_assoc tw."highway" attr}
    ça a donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = float_assoc tw."highway" attr 
                              ^^^^^
    error : syntax error.
    du coup ne n'ai pas su comment faire appel aux différents types de " ways ".

  8. #8
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    j'ai modifié le type de " id " dans Node , du coup ça marche ^^, merciii...
    Je ne pense pas que ce soit la raison du problème...

    Concernant la suite du message : il me semble que tu devrais commencer par lire un peu la documentation et le manuel au lieu d'essayer des syntaxes qui ne veulent rien dire. La programmation ce n'est pas de la bidouille. Alors, quelques rappels de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type foo = {x : int; y : bool}
    
    let myfoo = {x = 2; y = false}
    let three = 1 + myfoo.x
    let is_true = not myfoo.y
    let myotherfoo = {myfoo with y = true}
    Je m'étonne également de l'intervention discrète de gorgonite qui doit encore mettre en forme les messages en ajoutant les balises code... c'est un travail ingrat, si tu pouvais le lui éviter...

    Cordialement,
    Cacophrène

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 7
    Points
    7
    Par défaut difficulté projet caml
    Bonjour,
    J'ai aussi des difficultés dans ce meme projet.Si on a des balises fils dans la balise noeud , comment faire pour ajouter au type noeud la liste de ces balises fils ? j'ai beau avoir testé plusieurs chose, je n'y arrive pas.

  10. #10
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Si on a des balises fils dans la balise noeud , comment faire pour ajouter au type noeud la liste de ces balises fils ?
    Il faut déjà adapter le type node qui a été donné plus haut. Si j'ai bien compris, un nœud peut contenir n'importe quel type de données comme fils. Dans ce cas, il faut définir des types mutuellement récursifs. Quelque chose comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type data = Node of node | ... 
    and node = {...; children : data list}
    Je te laisse le soin de remplacer les points de suspension par les valeurs adéquates. Ensuite, si tu rencontres des problèmes pour utiliser ce type de données, nous pourrons regarder ensemble le code que tu as écrit. Le principe est simple : j'apporte de l'aide tant que j'ai la conviction que mon interlocuteur fait des efforts de son côté (ça ne servirait à rien que je fasse l'exo...). Ici c'est bien parti, alors continuons sur cette lancée.

    Compte tenu du jour de la semaine, j'en profite aussi pour souhaiter à tous les lecteurs du forum de bonnes fêtes de fin d'année !

    Cordialement,
    Cacophrène

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Oui, j'y avais déjà pensé et testé.
    Juste que quand je parcours ma data list, le moment ou j'utilise extraire noeud, je ne sais pas comment recuperer cette sous_data list pour la stocker dans le noeud.
    Je sais pas si c'est assez clair ce que je veux dire.Merci de ton aide.

    Bonne année également .

    Codrialement tictac

  12. #12
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Dans ce cas il faut adapter la fonction d'extraction avec quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let rec extract_data = function
      | ...
      | Xml.Element ("node", attr, children) -> extract_node attr children
    
    and extract_node attr children = 
      Node {...; children = List.fold_left extract_data [] children}
    Cordialement,
    Cacophrène

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    J'ai reussi a faire marcher, merci de ton aide précieuse CacoPhrene.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    nous travaillons sur le même projet et la structure du programme que nous avons jusque là écrit est sensiblement la même, sauf que nous avons choisi d'utiliser des Hashtbl pour stocker les node.

    Nous avons un problème sur l'extraction des données (extraire_data) que nous ne comprenons pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # let rec extraire_data dt = match dt with
    	|Xml.Element("bounds", attributes, fils) -> bounds_of_xml attributes 
    	|Xml.Element("node", attributes, fils) -> ajouter attributes;;;
        Characters 155-173:
      	|Xml.Element("node", attributes, fils) -> ajouter attributes;;;
                                                 ^^^^^^^^^^^^^^^^^^
    Error: This expression has type unit but an expression was expected of type
             bounds
    Et voici notre code...

    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
     
    #directory "+xml-light";;
    #load "xml-light.cma";;	
     
    (*type xml=
      |Element of(string * (string *  string) list * xml list)
      |PCData of string*)
     
    type node = { id :  int ; lat : float; lon: float; visible : bool};;
    type bounds = {minlat: float; minlon : float;  maxlat: float; maxlon: float};;
    type data = Bounds of bounds | Node of node;;
     
    let hash_node = Hashtbl.create 500;;
     
    let increment = fun i -> i+1;;
    let i = 0;;
    let v = 0;;
     
    (*fonction pour récuper la valeur associee et la convertir en float*)
    let conversion_float x y = float_of_string(List.assoc x y);;
     
    (*fonction pour extraire les donnees du bounds*)
    let bounds_of_xml attributes = {
    	minlat = conversion_float "minlat" attributes;
    	minlon = conversion_float "minlon" attributes;
    	maxlat = conversion_float "maxlat" attributes;
    	maxlon = conversion_float "maxlon" attributes;
    };;
     
     
    (*fonction pour extraire les donnees des nodes*)
    let node_of_xml attributes ={
    	id = int_of_string(List.assoc "id" attributes);
    	lat = conversion_float "lat" attributes;
    	lon = conversion_float "lon" attributes;
    	visible = bool_of_string (List.assoc "visible" attributes)}
    ;;
     
    let ajouter attributes =
      let node = node_of_xml attributes in
          Hashtbl.add hash_node node.id node
    ;;
     
    let rec extraire_data dt = match dt with
    	|Xml.Element("bounds", attributes, fils) -> bounds_of_xml attributes 
    	|Xml.Element("node", attributes, fils) -> ajouter attributes;
    ;;
     
    let extraire_fichier file = match Xml.parse_file file with
      | Xml.Element ("osm", _, fils) -> List.fold_left extraire_data [] fils
      | _ -> invalid_arg "Absence de 'osm'."
    ;;

  15. #15
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Une table de hachage est modifiée par effet de bord. En d'autres termes, la fonction Hashtbl.add modifie la table en place et ne renvoie pas une nouvelle table. Pour cette raison, votre fonction ajouter_attributes renvoie unit, ce qui n'est pas cohérent avec la fonction bounds_of_xml qui renvoie une valeur de type bounds. Comment s'en sortir ? De façon générale, évitez les variables globales, ce n'est pas idiomatique en programmation fonctionnelle.

    Votre fonction extraire_data devrait renvoyer des valeurs de type data. Vous devriez donc commnencer par écrire Bounds (bounds_of_xml ...) dans la première clause de votre filtrage, et réfléchir ensuite à la manière d'utiliser la table de hachage. Éventuellement, regardez aussi du côté du module Map (un peu différent et pas forcément facile à utiliser).


    Cordialement,
    Cacophrène

  16. #16
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Xml-Light Probleme parsing fichier xml
    Bonjour à tous,

    Tout d'abord je tiens a vous remercier ace à la discussion "Extraire fichier xml Ocaml" je n'aurai pas pu avancer dans mon projet. J'ai essayé de reprendre les exples que vous avez cité pour créer le mien mais j'ai des difficultés. Merci de votre aide.

    J'ai un fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     <OMOBJ>
     <OMA>
        <OMS name="plus" cd="arith1"/>
        <OMV name="a"/>
        <OMA>
          <OMS name="times" cd="arith1"/>
          <OMV name="c"/>
          <OMV name="b"/>
        </OMA>
      </OMA>
    </OMOBJ>
    et mon code est le suivant :

    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
     
    type data =Oper of oper|Var of var and 
     oper = {name : string; cd : string;children : data list} and
    var = {names : string;}
     
    let extract_variable attr = Var {
      names = List.assoc "name" attr}
     
    let rec extract_data acc = function
      | Xml.Element ("OMS", attr, _) ->extract_variable attr:: acc
      | Xml.Element ("OMV", attr, _) -> extract_variable attr:: acc
      | Xml.Element ("OMA", _, children) -> extract_node [] children
      | _ -> acc
     
    and extract_node attr children = [
      Oper {name =List.assoc "name" attr; cd = List.assoc "cd" attr; children = List.fold_left extract_data [] children}]
     
      let xml = Xml.parse_file "Mon fichier2.xml" in
      let res =
        Xml.fold (fun output xml ->
          match xml with
         | Xml.Element ("OMA", _, children) -> List.fold_left extract_data output children
      | _ -> invalid_arg "Missing XML element 'OMA'."	  
        ) [] xml
    L'erreur que j'obtiens : Exception: Not_found.
    Je suis débutante concernant Ocaml et j'arrive pas à trouver un tuto sur la librairie XML-Light. Si vous pouviez m'aider! merciiiii

Discussions similaires

  1. Extraire les données d'un fichier XML (log)
    Par sarra2104 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/05/2012, 10h33
  2. extraire les données d'un fichier xml avec xmlspy
    Par mouna1 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/06/2009, 14h50
  3. [DOM XML] Transfomer en variables les données d'un fichier xml
    Par rozdiwel dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 02/10/2006, 19h46
  4. Pour extraire les données d'un fichier texte
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 02/05/2006, 16h01
  5. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 21h39

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