12
votes

Éraser XML léger et léger

J'ai un document XML format spécifique que je me poussé. Ce document sera toujours le même type il est donc très stricte.

Je dois analyser ce que je puisse le convertir en JSON (bien, une version légèrement bâtarde pour que quelqu'un puisse l'utiliser d'autre avec DOJO).

Ma question est, dois-je utiliser un léger très rapide analyseur XML (pas besoin de SAX, etc.) (toutes les idées?) Ou écrire mon propre, convertir essentiellement en un StringBuffer et tourner à travers le réseau? Fondamentalement, sous les couvertures Je suppose que tous les parseurs HTML tourneront à travers la chaîne (ou mémoire tampon) et analyse syntaxique, produire une sortie sur le chemin à travers.

Merci

modifier

Le xml sera entre 3/4 lignes à 50 max (à l'extrême) ..


2 commentaires

Essayez VTD-XML et vous ne le regretterez pas ..


Dupliqué possible de Bibliothèque XML minimaliste et rapide pour Java?


8 Réponses :


1
votes

Vous pouvez utiliser DOM4J / XStream pour lire le XML dans un modal Java équivalent, puis utiliser JSONLIB pour convertir en JSON.


1 commentaires

+ DOM4J a SAX comme API, mais plus facile.



11
votes

8 commentaires

Je soupçonne que par "léger", Joe signifie "est facile à utiliser"; L'API axée sur le rappel SAX n'est pas la plus conviviale.


J'aurais + 'éditer cela plus si je pouvais. Sax est à peu près la manière la plus efficace possible de lire XML en Java. Vous auriez du mal à écrire un meilleur analyseur XML correct. Il devrait être possible d'écrire le rappel pour produire le JSON directement, je penserais. S'il y a peu de traduction, il peut être extrêmement minuscule.


@Michael Borgwardt: Je pense qu'utiliser le DOM serait plus facile, puis écrivez votre propre analyseur :)


Mais Dom est définitivement pas de poids léger. Pour ce type de traduction d'un format à un autre, SAX est idéal. Faites-le bien et vous pouvez gérer des fichiers qui ne correspondaient jamais à la mémoire. (Vous n'en auriez pas besoin dans ce cas, mais ce n'est pas le point. :))


@Pspeed: IMHO SAX n'est pas idéal, car une approche axée sur les événements de SAX est plus difficile à comprendre et à utiliser que l'approche d'analyse de tirage (de l'analyseur KXML ou similaire).


Oui, Json a un toxml et vous pouvez faire de Json.xmltojson, mais je dois ajouter des bits supplémentaires et modifier quelques bits pour satisfaire les exigences de DOJO. Comme les rafales rapides seront très strictes au format, et constitueront généralement une ligne de 3/4 lignes (50 au plus A (un ensemble récurrent d'éléments de ligne 3/4) en mémoire ne sera pas trop un problème. Merci Encore une fois pour les commentaires jusqu'à présent ..


Je pense que la pulvérisation par rapport à la poussée revient à une expérience personnelle, à un moment donné. Pour la transformation de données, passer d'un format à un autre, poussez-vous semble entraîner moins de code généralement. Et c'est généralement plus réutilisable. Le kilométrage peut varier avec des cas d'utilisation différents. De plus, j'ai mes propres utilitaires saxoques qui ajoutent une envoi basée sur Nom de balise et une pile d'objets qui rend ce genre de choses encore plus trivial parfois. ( Meta-JB.svn.sourceforge.net/viewvc/meta-jb/trunk/dev/src/ma dans / ... ) Je ferais cela un peu différemment aujourd'hui mais cela fonctionne.


Push + Dispatch est agréable (par exemple) lorsque vous ignorez de grandes portions de l'entrée.



0
votes

Utilisez un véritable analyseur XML. Si vous ne le faites pas, vous serez probablement mordu lorsque quelque chose change. Le document peut être "très strict", mais dans deux ans, quelque chose sera probablement récupéré et il changera de structure de sorte qu'il analyse la même structure de données avec un analyseur XML et brise un analyseur à cordes homebrew.


2 commentaires

Je vois que vous pointez, mais déjà dans différents domaines (c'est-à-dire la prochaine étape de la chaîne), ils ont des changements de bits de Pure Json pour satisfaire des exigences.


Donc, l'analyseur non-JSON est mis en place pour prendre une chute, mais il n'est pas nécessaire de susciter la question en introduisant le même problème en utilisant un analyseur non-XML.



7
votes

Cela dépend vraiment du type de XML que vous analyse. Je n'écrirais pas votre propre analyseur quand il y a déjà quelque chose pour faire le travail pour vous.

Le choix de SAX / DOM est vraiment basé sur ce que vous essayez d'analyser, voyez-le à la manière de décider de laquelle utiliser:

http: // geekexplains .blogspot.com / 2009/04 / SAX-VS-DOM-DOM-DIFFÉRENCES-ENTRE-DOM-AND.HTML

Même si vous n'utilisez pas SAX / DOM, des options encore simples sont disponibles, jetez un coup d'œil à simple :)

http://simple.sourceforge.net/

Vous pouvez également envisager de considérer Stax.


1 commentaires

Merci, j'aurai un coup d'oeil à simple



3
votes

Peut-être que vous devriez regarder KXML 2, un petit analyseur de pull XML spécialement conçu pour les environnements contraints, pour accéder à des fichiers XML et afficher des fichiers XML pour les périphériques compatibles Java 2 Micro Shedition. Cela fonctionne bien avec Java SE / EE aussi ;-). Comme il est conçu pour la micro édition, il est vraiment léger (petite empreinte) et IMHO vraiment facile à utiliser (beaucoup plus facile que sax / dom, etc. Stuff).

De ma propre expérience avec KXML 2: Je l'ai utilisé pour analyser les fichiers XML de plus de 1 Go - Dumps Wikipedia et j'étais très content de la performance / de la consommation de mémoire, etc.

enfin ;-) - Link: http://kxml.sourceforge.net/kxml2/


1 commentaires

Merci,. Je vais regarder ça :) Comme nous aurons besoin d'une version mobile à un moment donné




-2
votes

Devez-vous utiliser XML?

J'ai constaté que mon propre format de texte personnalisé était beaucoup plus rapide que XML ou JSON avec l'un des paquets d'étagère hors tension - ils étaient rapides, mais en contrôlant mon propre format et en contrôlant une chaîne d'analyse de la chaîne, j'ai pu couper le temps en deux contre la mise en œuvre XML la plus rapide.

Évidemment, cela ne fonctionne que si vous êtes pleinement responsable des formats et que vous ne pouvez pas convenir à votre situation, mais pour tout autre dans cette situation: ne pensez pas que XML est l'option la plus rapide absolue que vous avez. Ce n'est pas.


0 commentaires

1
votes

Avez-vous vraiment besoin d'analyser / manipuler l'une des données du document XML? Sinon, vous pouvez simplement créer un XSLT. Vraiment simple, vraiment rapide.


1 commentaires

XSLT a été conçu pour transformer XML, alors l'utiliser pour convertir en JSON est une bonne idée.