C'est peut-être un peu hors sujet ... mais étant mon site préféré, c'est ici que je poste.
Je veux stocker des infos dans un fichier et je me dis que XML est une solution propre. J'écrirais un fichier du style
[?xml version="1.0" ?]
[??]
[element]
[foo]Information[/foo]
[bar]Information[/bar]
[/element]
[element]
...
[/element]
[/??]
Comment fais-je pour récupérer ces infos ? Je pense que l'API DOM est peut-être trop lourde pour ce que je veux faire.
Je dois donc utiliser SAX si j'ai bien lu (mais peut-être existe-t-il quelque chose d'autres).
Une ame charitable peut me diriger vers un tutorial ou me donner les lignes de code qui vont bien pour me permettre de débuter. J'imagine pouvoir ouvrir mon fichier et pouvoir faire un truc du style
while ( (node = foo.getNode("element")) != null ) {
node.getText("foo") ;
node.getText("bar") ;
// on passe au noeud suivant
}
Merci
# netbeans
Posté par Roger Rabbit . Évalué à 0.
Netbeans permet de generer automatiquement un parser SAX a partir d'un document XML et/ou d'une DTD. A la fin du processus tu obtiendras une classe avec des méthodes start/stop pour tous tes tags. ( bouton droit sur un document XML pour la génération )
Sinon pour DOM/SAX : DOM ca permet de charger entierement un document et de se balader dedans comme un graphe, alors que SAX ca lit le document ligne par ligne et ca génere des évenements ( start , stop, content ).
[^] # Re: netbeans
Posté par PiT (site web personnel) . Évalué à 1.
Je connais le principe de DOM et SAX mais ne sais pas encore le mettre en oeuvre.
Je ne cherche pas un bouton magique dans un IDE mais je veux comprendre le principe et le faire à la main. (J'utilise pas d'IDE pour l'instant pour diverses raisons).
[^] # Re: netbeans
Posté par Roger Rabbit . Évalué à 4.
[^] # Re: netbeans
Posté par PiT (site web personnel) . Évalué à 1.
Si je ne mets pas en oeuvre SAX, je suis obligé de gérer le fichier "comme u fichier texte" et écrire dans des méthodes qui vont bien pour retourner les infos qui m'intéressent.
Du genre j'ajoute à la classe des champs
String foo;
String bar;
Et dans la méthode startElement , je mets les attributs à jour. J'ajoute aussi un attribut me signalant lorsque je passe à l'élément suivant et la méthode qui met ce champ à jour ....
J'ai bon ?
[^] # Re: netbeans
Posté par Roger Rabbit . Évalué à 1.
Pense a bien verifier que le fichier xml valide la DTD correspondante, sinon tu risques de trouver dans cette situation :
<element>
<foo>a</foo>
<bar>a</bar>
</element>
<element>
<foo>b</foo>
</element>
donnant
(element)[foo=a,bar=a]
(element)[foo=b,bar=a]
sinon remets à null les chaines foo et bar lorsqu'un élement à été parsé.
-----------------------------------------
Pour revenir sur DOM et SAX, en général :
On utilise un parser DOM pour manipuler un document, traverser le document en pouvant revenir en arriere, et ce pour des petits documents , car cela consomme beaucoup de mémoire.
On utilise un parser SAX quand un document ne subira pas de modification de structure, ou pour des gros documents.
# Digester
Posté par bleh . Évalué à 6.
http://jakarta.apache.org/commons/digester/(...)
Un tutoriel assez simple :
http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html(...)
[^] # Re: Digester
Posté par PiT (site web personnel) . Évalué à 2.
Si quelqu'un passe par ici, il peut plussoyer notre ami bleh ...
[^] # Re: Digester
Posté par figus . Évalué à 1.
Je débarque dans le XML et l'univers des parsers etc... qui va avec.
J'ai le même objectif et Digester me plait aussi beaucoup.
J'ai un besoin supplémentaire cependant : transformer un objet en fichier XML. Un Digester inverse en gros.
En résumé :
1. en input, j'ai des fichiers XML validant une DTD1
2. en output, je dois fournir des fichiers XML validant une DTD2
J'ai donc besoin de faire une transformation, et ça me semble une bonne idée de passer par un objet.
Digester solutionne le point 1.
Quid du point 2 ?
Merci d'avance.
[^] # Re: Digester
Posté par Roger Rabbit . Évalué à 2.
je ne crois pas que digester permette la serialisation d'un object en xml.
Pour transformer ton schéma 1 en schéma 2, si j'étais toi j'utiliserais une XSLT, qui permet de transformer un document XML en un autre document XML.
Si tu veux absolument convertir en utilisant des objets , tu veux allez voir du coté de JAXB.( Java Architecture for XML Binding ).
Tu devrais pouvoir génerer un objet pour ton schéma 1 avec moyen de le serialiser/desérialiser et un objet pour ton schéma 2 avec moyen de le sérialiser/désérialiser, a toi ensuite de peupler les champ de l'objet 2 avec les valeurs de l'objet 1.
http://java.sun.com/xml/jaxb/about.html(...)
# Bibliothèque TinyXml
Posté par Marc Le Douarain (site web personnel) . Évalué à 1.
C'est du C++ mais ce n'est pas une usine à gaz, genre 2 fichiers à linker, c'est tout...
http://sourceforge.net/projects/tinyxml(...)
Bye.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.