2009-10-22 9 views
0

J'ai besoin de lire les données XML en utilisant java.Comment lire la valeur de la propriété XML en utilisant Java

Ceci est mon extrait de fichier XML.

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 

     <!-- Database connection settings --> 
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 

     <property name="connection.url">jdbc:mysql://192.168.1.55/tisas</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password">xxyy</property> 
     <property name="show_sql">false</property> 

J'ai besoin pour obtenir la valeur (jdbc: mysql: //192.168.1.55/tisas) à partir du fichier XML à l'aide de Java. comment puis-je l'obtenir?

+0

Cela ressemble à un fichier de configuration de mise en veille prolongée. Donc, il y a peut-être un moyen standard (une API?) D'obtenir les valeurs de ce XML. En d'autres termes, vous n'avez pas besoin d'analyser le XML vous-même. – Rahul

Répondre

0

Utilisez dom4j et sa documentation a de très nombreux exemples sur la façon d'obtenir ce que vous avez l'intention de faire

3

Il y a une multitude de façons d'y parvenir. Je suppose que vous l'avez lu une fois pour une application de longue durée, donc la performance ne devrait pas être un problème. Par conséquent, j'irais pour l'API Java XPath (Tutorial).

Voici un exemple entièrement utilise XPath (note: il suffit de remplacer le StringReader avec tout Reader qui convient à votre usecae - par exemple un FileReader):

import java.io.StringReader; 
import javax.xml.xpath.XPathFactory; 
import org.xml.sax.InputSource; 

public class XPath { 
    public static void main(String[] args) throws Exception { 
    String xml = "<hibernate-configuration><session-factory><property name=\"hibernate.connection.provider_class\">org.hibernate.connection.C3P0ConnectionProvider</property><property name=\"connection.driver_class\">com.mysql.jdbc.Driver</property><property name=\"connection.url\">jdbc:mysql://192.168.1.55/tisas</property></session-factory></hibernate-configuration>"; 
    String connectionUrl = XPathFactory.newInstance().newXPath().compile("//session-factory/property[@name='connection.url']/text()").evaluate(new InputSource(new StringReader(xml))); 
    System.out.println("connectionUrl = " + connectionUrl); 
    } 
} 

Je ne voudrais pas aller pour un DOM (comme Suggéré par Ram) si vous avez seulement besoin d'une seule valeur du fichier, il faudra plus de code.

+0

Lorsque j'exécute ceci, il affiche l'exception ci-dessous, [Erreur fatale]: 1: 7: La cible de l'instruction de traitement correspondant à "[xX] [mM] [lL]" n'est pas autorisée. Exception dans le thread "principal" org.xml.sax.SAXParseException: la cible de l'instruction de traitement correspondant à "[xX] [mM] [lL]" n'est pas autorisée. – Srinivasan

+0

Avez-vous exécuté mon code ou l'avez-vous adapté pour le lire à partir d'un fichier? J'ai exécuté ce code moi-même et cela fonctionne (j'utilisais le JRE 1.6.0_16 de Sun) – sfussenegger

+0

Et en passant, je regardais vos autres questions. Vous devriez vraiment envisager d'accepter la bonne/la meilleure réponse pour toutes vos questions - ce serait la façon dont fonctionne stackoverflow. – sfussenegger

3

En supposant que les bibliothèques Hibernate sont disponibles, et le fichier de propriétés sont stockées dans config.xml:

new Configuration().addFile("config.xml").getProperty("connection.url") 
0

Voici un exemple en utilisant la bibliothèque Xerces:

String xpath = "/hibernate-configuration/session-factory/property[@name='connection.url']/text()"; 

// Create the builder and parse the file 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setValidating(false); 


Document doc = factory.newDocumentBuilder().parse(new File("src/xml/input.xml")); 

// Get the matching elements 
String url = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath).item(0).getNodeValue(); 
System.out.println(url); 
Questions connexes