Как прочитать значение свойства XML с помощью Java - PullRequest
0 голосов
/ 22 октября 2009

Мне нужно прочитать данные XML с помощью Java.

Это мой фрагмент 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> 

Мне нужно получить значение (jdbc: mysql: //192.168.1.55/tisas) из XML-файла с использованием Java. как я могу получить это?

Ответы [ 4 ]

3 голосов
/ 22 октября 2009

Существует множество способов достичь этого. Я предполагаю, что вы прочитали это один раз для долго работающего приложения, поэтому производительность не должна быть проблемой. Поэтому я бы пошел на API Java XPath ( Tutorial ).

Вот полностью рабочий пример использования XPath (примечание: просто замените StringReader на Reader, подходящий для ваших пользователей - например, 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);
  }
}

Я бы не стал использовать DOM (как предложил Ram), если вам нужно только одно значение из файла, для него потребуется больше кода.

3 голосов
/ 22 октября 2009

Предполагается, что библиотеки Hibernate доступны, а файл свойств хранится в config.xml:

new Configuration().addFile("config.xml").getProperty("connection.url")
0 голосов
/ 22 октября 2009

Вот пример использования библиотеки 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);
0 голосов
/ 22 октября 2009

Используйте dom4j и в его документации очень много примеров того, как добиться того, что вы намереваетесь сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...