L'idée de base est que dans beaucoup de cas, l'analyse d'un fichier XML par une application est très basique, et ne requiert pas forcément l'utilisation de la libxml2, très puissante, mais un peu trop complexe et lourde. La libroxml permet, à partir d'une interface de programmation (API) comprenant une vingtaine de fonctions, de naviguer simplement dans un fichier XML, ainsi que d'utiliser un moteur XPath prenant en charge les expressions les plus courantes.
Bien évidemment, cette bibliothèque « roxe » le XML, mais à la base, libroxml signifie : « LIBrary Read Only XML ». Cependant, depuis la version 2.0, il est possible de créer et de modifier des documents XML à la volée (en mémoire), puis d'enregistrer les modifications dans un nouveau fichier.
En plus de la bibliothèque, le programme « roxml » permet d'exécuter des expressions XPath depuis un script shell.
Enfin, un module FUSE sûrement inutile, « fuse.xml », permet de monter un fichier XML en lecture seule dans le système de fichiers et de le parcourir selon les principes suivants :
- les nœuds simples sont des dossiers ;
- les nœuds textes sont représentés par un fichier « content.data » ;
- les attributs sont des fichiers.
Tous les commentaires et retours d'expérience sont les bienvenus.
Aller plus loin
- Site du projet libroxml hébergé sous Google code (126 clics)
- Performances de libroxml vs libxml2 (83 clics)
- Documentation (103 clics)
- Liste des expressions XPath prises en charge (51 clics)
# Related work
Posté par Antoine Reilles (site web personnel) . Évalué à 3.
Comment ça se compare avec xmltools (http://blog.huoc.org/xmltools/), qui fournit des outils comme xmlsed et xmlgrep ?
# Xpath
Posté par Zarmakuizz (site web personnel) . Évalué à 3.
Commentaire sous licence LPRAB - http://sam.zoy.org/lprab/
[^] # Re: Xpath
Posté par Jul (site web personnel) . Évalué à 3.
http://pypi.python.org/pypi/pyquery
(il existe évidemment des projets similaires en perl, ruby, php, et java ....)
[^] # Re: Xpath
Posté par Moonz . Évalué à 2.
[^] # Re: Xpath
Posté par Jul (site web personnel) . Évalué à 2.
J'incite juste à lire la man page http://api.jquery.com/category/selectors/
jquery fait plus que seulement sélectionner par classe, on sélectionne par attributs (sur les noms ou les valeurs), par éléments , hiérarchie, positions pour les cas multivalués, intersection, compléments ...
Bref, rien qui ne manque. C'est peut être pour ça que des développeurs ont fait les portages de syntaxe à la jquery pour le XML, non ? À moins que des devs aiment perdre du temps à faire des projets inutiles.
[^] # Re: Xpath
Posté par Moonz . Évalué à 4.
> À moins que des devs aiment perdre du temps à faire des projets inutiles.
Moins puissant ≠ inutile, hein. Par rapport à XPath, la syntaxe jQuery a l’avantage d’être plus simple, plus légère et plus claire — surtout en HTML grâce aux nombreux raccourcis. C’est en soi un avantage qui justifie largement son existence — je suis d’ailleurs passé de xpath à jquery dans certains de mes projets justement pour ça.
P.S.: ok, après relecture de mon premier message, le « c’est pour du html » était légèrement exagéré ;)
[^] # Re: Xpath
Posté par Jul (site web personnel) . Évalué à 0.
$("div:not(#alpha)")
a[@href='x' or @href='y']
$(a[href=x],$a[href=y])
mais on peut aussi intégrer le "regexp filter" ou passer une fonction de map qui retourne que les href = x ou y
$("a").grep( function(el) { href= $el.attr("href"); return inArray( href, [ "x", "y" ] ); });
Pour les autres selecteurs je m'attarderais pas à les traduire car elle me pique les yeux comme une regexp utilisée pour parser du xml.
jquery est très rubiesque/erlangesque dans son approche des données.
La beauté de jquery est de s'appuyer sur du map reduce avec des fonctions anonymes, et de très puissantes fonctions de manipulations du DOM qui rend le code lisible. Ce n'est pas un hasard si ce sont les non informaticiens qui se sont emparés de ce langage, car cela leur permet de faire la même chose que xpath de manière intuitive.
[^] # Re: Xpath
Posté par Moonz . Évalué à 4.
> $("div:not(#alpha)")
Pas la même chose : ne fonctionne que pour l’attribut id (et si je veux title ou href pour un lien ?), et c’est contains, pas equals.
Au passage, je viens de retester, et la solution div:not([@id*="alpha"]) fonctionne enfin (il y a quelques temps, il n’aimait pas cette syntaxe)
> a[@href='x' or @href='y']
> $(a[href=x],$a[href=y])
Pas la même chose: si ton sélecteur "a" est en fait un truc long comme un bras, tu es content de pouvoir faire un ou juste dans ton […]. Sans compter que dans ta version jQuery, tu parcoures l’arbre deux fois — en xpath, tu le fais qu’une fois. Et plus important, pour certains usages, l’ordre des résultats ne sera pas le même : dans le premier cas, tu as les liens dans l’ordre dans lequel ils apparaissent dans l’arbre DOM ; dans le second cas, tu as tous les liens "x" dans l’ordre d’apparition puis tous les éléments "y".
> La beauté de jquery est de s'appuyer sur du map reduce avec des fonctions anonymes, et de très puissantes fonctions de manipulations du DOM qui rend le code lisible.
Tu confonds l’API jQuery et la syntaxe de sélecteur jQuery. Tu peux très bien faire une API jQuery-like qui utilise xpath pour exprimer les sélecteurs, tout comme tu peux faire une syntaxe de sélecteurs jQuery-like qui n’ait pas une API jQuery-like (avec du map-reduce, comme tu dis).
Tout ce que je te dis, moi, c’est que la syntaxe des sélecteurs de xpath est plus lourde mais permet de faire plus de chose que celle de jQuery.
> Ce n'est pas un hasard si ce sont les non informaticiens qui se sont emparés de ce langage
Non informaticiens ? Des développeurs Javascript/PHP/Python/Ruby/… ?
Tu me fais peur là.
# pugixml
Posté par XRyl669 . Évalué à 6.
[http://pugixml.org/]
[^] # Re: pugixml
Posté par Zenitram (site web personnel) . Évalué à 6.
http://www.grinninglizard.com/tinyxml/
(+ http://tinyxpath.sourceforge.net/ pour XPath, mais je n'utilise pas donc je ne sais ce que ça vaut)
Quelqu'un a fait des tests sur les différents parsers XML léger? On s'y perd avec toutes ces libs légères!
PS : le module FUSE, j'adore, belle démonstration de la facilité d'intégration de FUSE!
[^] # Re: pugixml
Posté par devnewton 🍺 (site web personnel) . Évalué à 4.
http://sourceforge.net/apps/mediawiki/xeumeuleu/index.php?ti(...)
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: pugixml
Posté par BFG . Évalué à 3.
On dit que tous les gouts sont dans la nature, mais quand même...
[^] # Re: pugixml
Posté par Antoine . Évalué à 5.
[^] # Re: pugixml
Posté par devnewton 🍺 (site web personnel) . Évalué à 1.
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
# L'histoire est un éternel recommencement
Posté par Christophe Merlet (site web personnel) . Évalué à 10.
Bref, le syndrome pas fait par moi a encore frappé !
Je rappelle que quand la libxml, puis la libxml2 est sorti, c'était aussi la plus puissante et rapide des bibliothèque XML. qui a fini par manger expat qui était la référence de l'époque.
Des benchs de bibliothèques XML sur ces dernières années...
http://xmlbench.sourceforge.net/index.php?page=results.php
[^] # Re: L'histoire est un éternel recommencement
Posté par ZeroHeure . Évalué à 5.
Ça fait penser à la réflexion sidérante - très souvent lue ou entendue:
"le projet à l'air mort, sur le site il n'y a pas de nouvelle version depuis ... (suit un nombre de mois, d'années etc.)."
Alors qu'un programme, une lib, une doc, ... qui fonctionnent bien n'ont pas besoin de fréquentes nouvelles versions.
"La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay
[^] # Re: L'histoire est un éternel recommencement
Posté par tyoup . Évalué à 2.
[^] # Re: L'histoire est un éternel recommencement
Posté par Jul (site web personnel) . Évalué à 2.
Pour info, numpy implique l'installation des sources en fortran pour être recompilé :) Donc faut pas dire que ces bibliothèques sont oubliées. Une bonne bibliothèques n'est jamais remplacée o/
FORTRAN ROX......... (je déconne on est pas vendredi)
[^] # Re: L'histoire est un éternel recommencement
Posté par rewind (Mastodon) . Évalué à 3.
[^] # Re: L'histoire est un éternel recommencement
Posté par Emmanuel C . Évalué à 2.
[^] # Re: L'histoire est un éternel recommencement
Posté par defmonkey . Évalué à 2.
Pas de compat arrière => mauvais language => changer de langage.
S'assoir sur la compatibilité arrière dans les évolutions d'un langage, c'est vraiment faire preuve d'immaturité (soit du langage, soit du concepteur, soit des deux). En tous cas ça me suffit pour que je ne m'y interresse pas.
[^] # Re: L'histoire est un éternel recommencement
Posté par Zenitram (site web personnel) . Évalué à 5.
[^] # Re: L'histoire est un éternel recommencement
Posté par nicolas . Évalué à 1.
[^] # Re: L'histoire est un éternel recommencement
Posté par Anonyme . Évalué à 5.
Tu me fais penser à WindowMaker là...
[^] # Re: L'histoire est un éternel recommencement
Posté par Lelong Tristan (site web personnel) . Évalué à 3.
Le but n'est pas de rajouter des fonctions à l'infini, mais plutôt d'avoir un accès simple et performant aux fonctions de base, et c'est pour ça que je me suis fixé une limite à 20 fonctions d'API. Pour l'instant il en existe 19, il ne reste donc de la place que pour une seule fonctionnalité en interne.
La suite du projet sera alors plus de la correction de bugs / amélioration des perfs / support d'expression xpath.
Pour les killer features, si vraiment je (ou quelqu'un) veux se lancer la dedans, ce sera des modules séparés...
[^] # Re: L'histoire est un éternel recommencement
Posté par lolop (site web personnel) . Évalué à 9.
int anything_else_xml(int what, ...) ;
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: L'histoire est un éternel recommencement
Posté par pasBill pasGates . Évalué à 0.
Pourquoi un int pour le what ? Il y a un sens a avoir des valeurs negatives ?
C'est un size_t qu'il faut mettre (et pour le retour je dirais un enum)
[^] # Re: L'histoire est un éternel recommencement
Posté par Gniarf . Évalué à 3.
[^] # Re: L'histoire est un éternel recommencement
Posté par pasBill pasGates . Évalué à 1.
[^] # Re: L'histoire est un éternel recommencement
Posté par barmic . Évalué à 3.
Le pire c'est que la solution que tu donne un type qui contient une sémantique qui n'a rien à voir avec la fonction.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: L'histoire est un éternel recommencement
Posté par lolop (site web personnel) . Évalué à 4.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: L'histoire est un éternel recommencement
Posté par shbrol . Évalué à 5.
Le size_t, comme son nom l'indique, c'est fait pour les tailles / longueurs.
[^] # Re: L'histoire est un éternel recommencement
Posté par BFG . Évalué à 2.
[^] # Re: L'histoire est un éternel recommencement
Posté par BFG . Évalué à 2.
[^] # Re: L'histoire est un éternel recommencement
Posté par Christophe Merlet (site web personnel) . Évalué à 2.
[^] # libroxml pour l'embarqué
Posté par Thomas Monjalon . Évalué à 2.
[^] # Re: libroxml pour l'embarqué
Posté par Hugues Hiegel (site web personnel) . Évalué à -1.
[^] # Re: L'histoire est un éternel recommencement
Posté par reno . Évalué à 4.
Si tu pense a l'occupation mémoire, tu pourrais découper une librairie existante en plusieurs librairies chargée uniquement en fonction des besoins..
[^] # Re: L'histoire est un éternel recommencement
Posté par Lelong Tristan (site web personnel) . Évalué à 3.
Ensuite, la limite à 20 fonctions n'a pas été fixée arbitrairement, mais c'est plutôt un compromis entre : pas trop de fonctions pour rester simple et suffisamment pour que chaque fonction fasse une chose et pas 36.
[^] # Re: L'histoire est un éternel recommencement
Posté par zebra3 . Évalué à 4.
Aujourd'hui, le bureau léger est LXDE, mais pour combien de temps ?
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
# Même léger, c'est lourd
Posté par AncalagonTotof . Évalué à 9.
Bonjour,
Je tiens à faire entendre un son de cloche peu relayé : celui de ceux qui n'aiment pas le XML et ne comprennent pas la "folie" qui tourne autour.
Combien de développements ai-je vu blindés de XML, de couches et de sur-couches, au point que plus personne de se rend compte de la lourdeur induite par tout ce qu'il faut pour digérer ce format.
Et un format soit disant lisible ! Ah ah ah, je me marre ! Qui sait lire le XML avec ses yeux ? Pas celui qu'on bricole avec son vim/emacs (ou son notepad plutôt, c'est plus le profil). Non, le velu, celui qui utilise toutes les lourdeurs^Wsubtilités ?
Et qui écrit le machin (DTD, c'est bien ça ?) qui vérifie la validité de ce qu'on a écrit ?
Et arrivé là, on a même pas encore commencé à l'utiliser !
Bon, j'arrête là, J.P. Troll l'a beaucoup mieux expliqué que moi dans Linux Magazine n°127. Parce qu'y'en a marre !
Bon amusement quand même !
[^] # Re: Même léger, c'est lourd
Posté par barmic . Évalué à 3.
Au contraire je n'entends que de ça des critiques contre le XML, même les développeurs Java n'aiment pas (ils passent aux annotations le plus possible).
Le seul endroit où je n'ai pas entendu de critique sur l'utilisation du XML c'est pour les OpenDocument et le OOXML.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Même léger, c'est lourd
Posté par totof2000 . Évalué à 2.
[^] # Re: Même léger, c'est lourd
Posté par Infernal Quack (site web personnel) . Évalué à 5.
Si on regarde un flux RSS ou Atom par exemple, c'est du XML et c'est assez simple à lire et comprendre.
Si on prend par contre les fichiers de conf d'une application Android, c'est verbeux, lourd et chiant à lire.
Et puis XML reste une bonne façon de représenter des données de façon arborescente de façon normée avec un panel d'outil incroyable pour les manipuler et les lire.
Et éditer du XML directement ça reste assez rare et réservé à des développeurs. Tu édites souvent du SVG à la main ? Du OpenDocument ? Tu fais tes flux RSS à la main ?
Perso, oui je trouve le XML facile à lire si bien pensé. Et je préfère cela que 15 façons différentes de stocker une configuration arborescente à réapprendre à chaque nouvelle application / framework /...
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
[^] # Re: Même léger, c'est lourd
Posté par nigaiden . Évalué à 1.
En général, je n'ai aucun problème avec les fichiers de configuration non-XML, car la plupart des formats permettent d'intégrer des commentaires suffisants pour comprendre ce que l'on fait. Dans mon expérience personnelle, la lourdeur de XML n'a jamais apporté quoi que ce soit.
# Module FUSE
Posté par Samuel Thibault (site web personnel) . Évalué à 8.
[^] # Re: Module FUSE
Posté par zebra3 . Évalué à 10.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
# Multiplateforme
Posté par LdK . Évalué à 1.
est-elle multi-plateformes ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.