Il y a plusieurs possibilité pour lire du xml en ocaml. Mes besoins étant relativement simple, j’ai choisi Xmlm.
Un exemple
Il y a plusieurs moyen de l’utiliser.
Ici, on ne parle que de la lecture d’un fichier,
et l’utilisation de de la fonction Xmlm.input_doc_tree
qui permet initialement de construire un arbre,
mais qu’on utilise ici de manière plus simple :
let error fmt
let f _fmt
let msg = Format.flush_str_formatter () in
Format.eprintf "%s@." msg;
exit 1
in Format.kfprintf f Format.str_formatter ("@["^^fmt^^"@]")
let get_attrib attribs aname
let is_ok ((_uri, name), value) = (name = aname) in
match List.filter is_ok attribs with
| (_, value)::[] -> value
| [] -> error "Parse error: no attribute '%s'" aname
| _ -> error "Parse error: several values for '%s'" aname
let process file ic
let i = Xmlm.make_input (`Channel ic) in
let el ((uri, node), attribs) childs = match node with
| "testcase" ->
let name = get_attrib attribs "name" in
let fails = List.filter (fun x -> x) childs in
Format.printf "%s: %s@." name
(if List.length fails = 0 then "ok" else "KO");
false
| "failure" -> true
| _ -> false
in
let data _d = false in
Xmlm.input_doc_tree ~el ~data i
let read file
try ignore (process file (open_in file));
with
| Sys_error msg -> error "%s" msg
| Xmlm.Error (pos, e) ->
error "xml error at line %d: %s@." (fst pos) (Xmlm.error_message e)
let () = read Sys.argv.(1)
Pour compiler, il ne faut pas oublier la librairie :
ocamlfind ocamlopt -annot -o prog -linkpkg -package xmlm prog.ml
Et enfin pour exécuter :
./prog file.xml
Documentation
Voir aussi :
- Ocaml: mon principal langage de développement
- Fonctions de log en ocaml
- Scripts en ocaml
- Ocaml: module Format et autres
- Filtrage de fichiers avec ocaml
- XSLT pour mettre en relation deux documents
- XML : validation, transformations, etc.
- Docbook : pour produire de la documentation technique
- js-of-ocaml: des pages web en ocaml
- Ocamlmerlin sous vim
- Perl pour faire des scripts efficaces
- Filter with ocamlgraph
- Ocamlgraph visualization
Table des matières
Tags
ack
acronymes
analyse_statique
android
apt-get
awk
bash
bits
boot
c
checksum
coq
couleurs
css
csv
cut
dessin
diff
disque
docbook
docker
documentation
dokuwiki
dot
développement
fenêtres
firefox
frama-c
fstab
ftp
gcc
gestion_de_projet
gestion_de_version
git
graph
graphe
grep
grub
gzip
heredoc
htaccess-réseau
html
ide
ikiwiki
imagemagick
images
imprimer
ip
jenkins
js-of-ocaml
langage
latex
linux
make
mercurial
merlin
nvidia
ocaml
ocamlfind
ocamlgraph
orthographe
outil
parallel
path
pdf
perl
pgp
preuve_formelle
regexp
réseau
script
sed
sphinx
sqlite
ssh
sudo
svg
svn
syncbox
syntastic
systeme
système
tableurs
tcp-ip
texte
thunderbird
tikz
time
trac
txt2tags
ubuntu
unix
usb
utf-8
vim
virtualbox
virtualisation
vnc
web
windows
xfce
xkcd
xml
xmlstarlet
xmodmap
xsd
xslt
xubuntu
zcat
zenity
éditeur
émoticône
Dernières notes
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit