web-dev-qa-db-fra.com

Quelle bibliothèque Java XML recommandez-vous (pour remplacer dom4j)?

Je cherche quelque chose comme dom4j, mais sans les verrues de dom4j, telles que des documents défectueux ou manquants et un statut de développement apparemment bloqué.

Contexte: J'utilise et _ { plaidoyer dom4j, mais je ne me sens pas tout à fait à ce sujet car je sais que la bibliothèque est loin d'être optimale (exemple: voyez comment les méthodes de XSLT sont liées Les classes Stylesheet sont documentées; que passeriez-vous à run () en tant que paramètre String mode?)

Conditions requises: La bibliothèque doit rendre la gestion XML de base plus facile qu’elle ne l’est lorsque les packages usingJDK pur _ ( javax.xml et org.w3c.dom ). Des choses comme ça:

  • Lire un document XML (à partir d'un fichier ou d'une chaîne) dans un objet, parcourir et manipuler facilement le DOM, effectuer des requêtes XPath et exécuter XSLT sur celui-ci.
  • Construisez un document XML dans votre code Java, ajoutez des éléments, des attributs et des données, puis écrivez le document dans un fichier ou une chaîne.

J'aime beaucoup ce que (dom4j promet) , en fait: " une bibliothèque open source facile à utiliser pour travailler avec XML, XPath et XSLT [...] avec un support complet pour DOM, SAX et JAXP. "Et la prochaine version de dom4j 2.0 prétend tout régler: utiliser pleinement Java 5 et ajouter la documentation manquante. Mais malheureusement, si vous regardez de plus près :

Attention: dom4j 2.0 est en phase pré-alpha. Il est probable que cela ne puisse pas être compilé. Au cas où il pourrait être compilé au hasard, il est probable qu'il ne puisse pas fonctionner. Au cas où il fonctionne occasionnellement, il peut exploser soudainement. Si vous voulez utiliser dom4j, vous voulez la version 1.6.1. Vraiment.

... et le site Web l'a dit pour un long time. Y a-t-il une bonne alternative à dom4j? Veuillez fournir une justification de votre bibliothèque préférée au lieu de simplement renvoyer des noms et des liens. :-)

74
Jonik

Bien sûr, XOM :-)

XOM est conçu pour être facile à apprendre et facile à utiliser. Cela fonctionne très bien directement, et a un très courbe d'apprentissage peu profonde. En supposant vous connaissez déjà XML, vous devrait être capable de se mettre en marche avec XOM très rapidement.

J'utilise XOM depuis plusieurs années et je l'aime toujours beaucoup. Facile à utiliser, avec beaucoup de documentation et d’articles sur le Web, l’API ne change pas entre les versions. 1.2 a été publié récemment.

XOM est la seule API XML qui n ° compromis sur l'exactitude. XOM uniquement accepte les XML bien formés dans les espaces de noms documents, et ne vous permet que de créer un XML bien formé dans un espace de noms documents. (En fait, il est un peu plus strict que cela: il garantit en fait que tous les documents sont arrondis et ont des ensembles d'informations bien définis XML.) XOM gère votre code XML de manière à ce que vous n'êtes pas obligé. Avec XOM, vous pouvez concentrez-vous sur la valeur unique de votre application, et faites confiance à XOM pour obtenir le Droit XML.

Consultez la page Web http://www.xom.nu/ pour la FAQ, le livre de recettes, les raisons de conception, etc. Si seulement tout a été conçu avec autant d'amour :-)

Author a également écrit sur Qu'est-ce qui ne va pas avec les API XML (et comment les corriger) . (Fondamentalement, les raisons pour lesquelles XOM existe en premier lieu)

Voici également une interview d'Artima en cinq parties avec l'auteur sur XOM, dans laquelle ils parlent de de ce qui ne va pas avec les API XML , Le bon, le mauvais et le DOM , Une revue de conception de JDOM , Leçons tirées de JDOM et enfin Principes de conception et XOM .

53

Celui intégré au JDK ... avec quelques ajouts.

Oui, c'est douloureux à utiliser: il est calqué sur les spécifications du W3C qui ont été clairement conçues par le comité. Cependant, il est disponible n'importe où, et si vous vous en tenez à cela, vous ne rencontrerez pas les arguments "J'aime Dom4J", "J'aime JDOM", "J'aime J'aime StringBuffer" qui proviennent de bibliothèques tierces. D'autant que de tels arguments peuvent se transformer en différents morceaux de code en utilisant différentes bibliothèques ...

Cependant, comme je l’ai dit plus tôt, j’améliore quelque peu: la bibliothèque Practical XML est un ensemble de classes d’utilitaires facilitant le travail avec le DOM. Hormis le wrapper XPath, il n'y a rien de complexe ici, juste un tas de routines que je me suis retrouvé en train de réécrire pour chaque travail.

17
kdgregory

J'utilise XMLTool pour remplacer Dom4j et cela fonctionne plutôt bien.

L'outil XML utilise le modèle d'interface Fluent pour faciliter les manipulations XML:

XMLTag tag = XMLDoc.newDocument(false)
   .addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/")
   .addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0")
   .addRoot("html")
   .addTag("wicket:border")
   .gotoRoot().addTag("head")
   .addNamespace("other", "http://other-ns.com")
   .gotoRoot().addTag("other:foo");
System.out.println(tag.toString());

Il est fait pour Java 5 et il est facile de créer un objet itérable sur Éléments sélectionnés:

for (XMLTag xmlTag : tag.getChilds()) {
   System.out.println(xmlTag.getCurrentTagName());
}
10
Gilberto Olimpio

J'ai toujours aimé jdom . Il a été écrit pour être plus intuitif que l'analyse DOM (et l'analyse SAX semble toujours maladroite de toute façon). 

De la déclaration de mission:

Il n'y a aucune raison impérieuse pour un API Java permettant de manipuler XML en tant que complexe, difficile, peu intuitif, ou un douleur dans le cou. JDOMTM est les deux Centré sur Java et optimisé pour Java. Il se comporte comme Java, il utilise Java collections, c’est tout à fait naturel API pour les développeurs Java actuels et il fournit un point d'entrée à faible coût pour en utilisant XML.

C’est à peu près ce que j’ai vécu: navigation assez intuitive dans les arborescences de nœuds. 

6
Steve B.

J'utilise XStream , une bibliothèque simple pour sérialiser des objets en XML et inversement.

il peut être basé sur des annotations (comme JAXB), mais il a une API très simple et facile à utiliser et vous pouvez même générer du JSON.

5
IAdapter

J'ajouterai à la réponse intégrée de @kdgregory en disant pourquoi pas JAXB?

Avec quelques annotations, il est assez facile de modéliser la plupart des documents XML. Je veux dire que vous allez probablement analyser le contenu et placer un objet, n'est-ce pas?

JAXB 2.0 est intégré à JDK 1.6 et contrairement à de nombreuses autres bibliothèques javax intégrées, celle-ci est très bonne (Kohusuke a travaillé dessus pour que vous sachiez que c'est bien).

3
Adam Gent

Dans un projet récent, j'ai dû analyser XML et fini par utiliser Simple Framework, recommandé par un collègue. 

J'étais assez content avec ça à la fin. Il utilise une approche basée sur des annotations pour mapper des éléments et des attributs XML sur des classes et des champs Java. 

<example>
  <a>
    <b>
      <x>foo</x>
    </b>
    <b>
      <y>bar</y>
    </b>
  </a>
</example>

Code Java correspondant:

@Root
public class Example {

   @Path("a/b[1]")
   @Element
   private String x;

   @Path("a/b[2]")
   @Element
   private String y;
}

C'est tout à fait différent de dom4j ou XOM. Vous évitez d’écrire du code de manipulation XML stupide et génial, mais au début, vous allez probablement vous cogner la tête contre un mur pendant un moment en essayant de corriger les annotations.

(C’est moi qui ai posé cette question il ya 4 ans. Bien que XOM me semble un substitut dom4j décent et assez populaire, je n’ai pas fini par l’embrasser complètement. Curieux que personne n’ait mentionné Simple Framework ici. J'ai décidé de résoudre ce problème, car je l'utiliserais probablement à nouveau.)

2
Jonik

Dans notre projet, nous utilisons http://www.castor.org/ mais seulement pour les petits fichiers XML. C'est vraiment facile à apprendre, il suffit d'un fichier de mappage XML (ou d'aucun si les balises XML correspondent parfaitement aux attributs de classe) et c'est fait. Il prend en charge les écouteurs (comme les rappels) pour effectuer un traitement supplémentaire. Les inconvénients: ce n'est pas un standard Java EE comme JAXB.

1
Lluis Martinez

vous pouvez essayer JAXB, avec des annotations très pratiques et pratiques: Java Architecture for XML Binding.

0
Taran Singh

Pour construire des documents XML, je suggère xmlenc . Il est utilisé dans cassandra .

0
Jingguo Yao

J'utilise parfois Jericho , qui est principalement un analyseur HTML, mais peut analyser toute structure de type XML. 

Bien sûr, cela ne concerne que les opérations XML les plus simples, telles que la recherche de balises avec un nom donné, une itération dans la structure, le remplacement des balises et ses attributs, mais n'est-ce pas la plupart des cas d'utilisation?

0
Danubian Sailor