2011-10-19 6 views
2

Je suis en train d'écrire une application Java qui prend en entrée du code XML délimité par un schéma et doit le traduire en protbuf. Il n'y a pas de traitement à faire. J'ai simplement besoin de récupérer quelques champs du XML et de les utiliser pour créer un protobuf. J'espérais pouvoir utiliser JIBX pour mapper directement le XML à la classe Builder de mon protobuf, éliminant ainsi tout travail intermédiaire. Cependant, JIBX requiert que les méthodes set de l'objet en cours de construction retournent void (http://jibx.sourceforge.net/details/binding-attributes.html). La classe Builder générée par Protobuf suit le modèle de conception du générateur et ne renvoie pas d'annulation de sa méthode de définition. Y at-il de toute façon pour contourner ce problème et que JIBX traduise directement XML en classe protobuf? Peut-être existe-t-il un autre outil d'analyse XML * que je devrais utiliser? Ou devrais-je écrire un code intermédiaire pour faciliter la traduction entre XML et protobuf?Traduction de XML en protobuf

* note: l'entrée XML que je reçois est extrêmement volumineuse et je n'ai besoin que d'une poignée de champs. Cela réduit certains des outils d'analyse XML plus lourds de mon utilisation.

+0

Est-ce que ça doit être java? Les classes protobuf-net sont généralement très satisfaites de XmlSerializer et de protobuf-net en même temps. –

+0

Malheureusement, le projet doit être en Java. J'ai une certaine flexibilité dans les outils à utiliser pour faire le travail, mais c'est à peu près tout. – Josh

+1

Que diriez-vous d'une transformation XSL? Si vous avez juste besoin d'extraire des champs et de créer un fichier protobuf, la feuille de style peut être très simple à écrire. – Marko

Répondre

0

J'ai fini par effectuer une Transformation XSL sur le XML d'entrée et ai alimenté la sortie à travers un (petit) SAX Parser personnalisé pour créer le protobuf. Merci pour l'aide!

+0

Je recherche la solution pour la même question. Pouvez-vous s'il vous plaît poster un exemple pour le faire –

+0

J'ai utilisé un analyseur de sax pour saisir les champs dont j'ai besoin et construire le protobuf. Malheureusement, la solution n'a rien de particulièrement spécial. – Josh