如何使用Java读取XML属性值

时间:2009-10-22 06:36:47

标签: java

我需要使用java来读取XML数据。

这是我的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> 

我需要使用java从xml文件中获取值(jdbc:mysql://192.168.1.55/tisas)。 我怎么能得到它?

4 个答案:

答案 0 :(得分:3)

有很多方法可以实现这一目标。我假设您为长期运行的应用程序读过一次,因此性能不应成为问题。因此,我会选择Java XPath API(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所建议的那样),它需要更多代码。

答案 1 :(得分:3)

假设Hibernate库可用,并且属性文件存储在config.xml中:

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

答案 2 :(得分:0)

使用dom4j,其文档中有很多关于如何实现目标的示例

答案 3 :(得分:0)

以下是使用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);