2010-02-25 8 views
8

Je n'ai pas besoin de lire les fichiers XML complexes. Je veux juste lire le fichier de configuration suivante avec un lecteur XML simpleComment lire un fichier XML avec Java?

<config> 
    <db-host>localhost</db-host> 
    <db-port>3306</db-port> 
    <db-username>root</db-username> 
    <db-password>root</db-password> 
    <db-name>cash</db-name> 
</config> 

Comment lire le fichier XML ci-dessus avec un lecteur XML par Java?

http://i45.tinypic.com/2eamoeg.jpg

+1

Comme ce sont des paires de valeurs de noms, pourquoi ne pas simplement définir cela comme un fichier .properties? De cette façon, vous n'avez pas besoin de l'analyser du tout. – Adamski

+1

duplication possible de [Quelle est la meilleure/la plus simple façon de lire dans un fichier XML dans l'application Java?] (Http://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to- read-in-an-xml-file-in-java-application) – ripper234

Répondre

8

Puisque vous voulez analyser les fichiers de configuration, je pense que commons-configuration serait la meilleure solution.

Configuration Commons fournit une interface de configuration générique qui permet à une application Java pour lire les données de configuration à partir d'une variété de sources (y compris XML)

+0

J'ai essayé commons-cofiguration et j'ai eu une erreur de compilateur comme montré ci-dessus dans l'instantané ... L'instantané peut être trop flou en raison de la réduction de taille pour que vous puissiez accéder l'instantané à http://i45.tinypic.com/2eamoeg.jpg ............. OU ..... il suffit de glisser n déposer l'image dans la barre d'adresse de votre navigateur (si vous êtes en utilisant firefox) –

+0

Yatendra Goel vous devez également télécharger apache commons-lang. Et quelques autres communes aussi - voir ici http://commons.apache.org/configuration/dependencies.html – Bozho

+0

J'ai écrit l'instruction suivante mais cela ne fonctionne pas ..... HOST = config.getString ("db-host "); ...................... Y at-il une erreur dans cette instruction? –

2

Il y a plusieurs parseurs XML pour Java. Un que j'ai utilisé et trouvé particulièrement favorable aux développeurs est JDOM. Et par développeur convivial, je veux dire "orienté Java" (c'est-à-dire que vous travaillez avec des objets dans votre programme), au lieu de "orienté document", comme d'autres outils le sont.

5

Vous pouvez utiliser un simple analyseur DOM pour lire la représentation XML.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

DocumentBuilder db = dbf.newDocumentBuilder(); 
dom = db.parse("config.xml"); 
+0

Ces classes semblent être en jdk. Pas de dépendances externes. –

9

J'aime jdom:

SAXBuilder parser = new SAXBuilder(); 
Document docConfig = parser.build("config.xml"); 
Element elConfig = docConfig.getRootElement(); 
String host = elConfig.getChildText("host"); 
0

Pour un cas d'utilisation similaire dans mon application je JAXB. Avec Jaxb, lire des fichiers XML, c'est comme interagir avec les POJO Java. Mais pour utiliser JAXB vous devez avoir le xsd pour ce fichier xml. Vous pouvez rechercher plus d'informations here

2

Je recommanderais Commons Digester, qui vous permet d'analyser un fichier sans écrire des rames de code. Il utilise une série de règles pour déterminer quelle action doit être exécutée lors de la rencontre d'un élément ou d'un attribut donné (une règle typique peut être de créer un objet métier particulier).

0

Si vous voulez être en mesure de lire et écrire des objets XML directement, vous pouvez utiliser XStream

4

Si vous avez juste besoin d'une solution simple qui est inclus avec le SDK Java (depuis 5.0), consultez le paquet XPath . Je suis sûr que les autres fonctionnent mieux, mais c'était tout ce dont j'avais besoin. Voici un exemple:

import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpressionException; 
import javax.xml.xpath.XPathFactory; 
import org.xml.sax.InputSource; 

... 

try { 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
    InputSource inputSource = new InputSource("strings.xml"); 

    // result will equal "Save My Changes" (see XML below) 
    String result = xpath.evaluate("//string", inputSource); 
} 
catch(XPathExpressionException e) { 
    // do something 
} 

strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="saveLabel">Save My Changes</string> 
</resources> 
0

Bien que je ne l'ai pas essayé encore XPath comme il est venu juste mon attention maintenant, je l'ai essayé quelques solutions et n'ont pas trouvé tout ce qui fonctionne pour ce scénario.

J'ai décidé de faire une bibliothèque qui répond à ce besoin tant que vous travaillez selon les hypothèses mentionnées dans le readme. Il a l'avantage d'utiliser SAX pour analyser le fichier entier et le renvoyer à l'utilisateur sous la forme d'une carte afin que vous puissiez rechercher les valeurs sous forme de clé -> valeur.

https://github.com/daaso-consultancy/ConciseXMLParser

Si quelque chose manque me de bien vouloir informer l'élément manquant que je ne développes que ce sur la base des besoins des autres et moi-même.

+0

Vous répondez à un doublon. Pensez à répondre au fil d'origine. – yacc

+0

@yacc merci pour votre commentaire. Cependant, j'ai regardé le [doublon potentiel] signalé (https://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to-read-in-an-xml-file-in-java -application) et ce n'était pas objectif dans la façon dont il a été énoncé (solution «meilleure/la plus simple»). S'il y a un autre message que j'ai manqué, s'il vous plaît fournissez-moi le lien pour que je puisse vérifier. Cependant, dans cette question, un exemple XML a été fourni et le questionneur mentionne clairement qu'il veut une solution qui nécessite très peu de lignes de code. C'est pourquoi j'ai répondu à cela. –

Questions connexes