我需要使用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)。 我怎么能得到它?
答案 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);