Srinivasan
Srinivasan

Reputation: 12040

How to read XML Property value using Java

I need to read XML data by using java.

This is my XML file snippet.

<?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> 

I need to get the value(jdbc:mysql://192.168.1.55/tisas) from the xml file using java. how can i get it?

Upvotes: 0

Views: 2970

Answers (4)

sfussenegger
sfussenegger

Reputation: 36095

There is a multitude of ways to achieve this. I assume you read this once for a long-running application, so performance shouldn't be an issue. Therefore, I'd go for the Java XPath API (Tutorial).

Here is a fully working example using XPath (note: just replace the StringReader with any Reader that's appropriate for your usecae - e.g. a 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);
  }
}

I wouldn't go for a DOM (as suggested by Ram) if you only need a single value from the file, it will require more code.

Upvotes: 3

Christoph Metzendorf
Christoph Metzendorf

Reputation: 8078

Here's an example using the Xerces library:

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);

Upvotes: 0

ykaganovich
ykaganovich

Reputation: 14964

Assuming Hibernate libraries are available, and the properties file is stored in config.xml:

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

Upvotes: 3

Prabhu R
Prabhu R

Reputation: 14222

Use dom4j and its documentation has very many examples on how to achieve what you intend to do

Upvotes: 0

Related Questions