xml相关概念及java读取配置文件

时间:2022-12-26 15:38:48

XML:eXtensible MarkupLanguage。可标记性扩展语言。

   XSL:(eXtensibleStylesheet Language)-可扩展样式表语言,用来修饰XML。

DTD(Document Type Definition):标记性语言规则,可以约束标签、属性的名字,还有其中的值。


这三种东西好像html和css还有javascript其中的关系,XML文件可以作为配置文件使用。XML中的标签可以随便写,只要配对就可以。下面写一个用java读取XML文件中的值。

首先看XML文件中的代码:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
<url>jdbc:oracle:thin:@localhost:1521:bjpowernode</url>
<user-name>drp1</user-name>
<password>drp1</password>
</db-info>
</config>

这里的config是跟标记,中间的driver-name都是自己写的,XML中并没有规定。


看用Java怎么读取:

import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/*
* 解析sys-config.xml文件
* 引入jaxen-1.1-beta-6.jar可以使用Xpath
*/
public class XmlConfigReader {

/*
//恶汉式
private static XmlConfigReader instance = new XmlConfigReader();

private XmlConfigReader(){

}

public static XmlConfigReader getInstance(){
return instance;
}
*/

//懒汉式
private static XmlConfigReader instance = null;
//保存jdbc相关配置信息
JdbcConfig jdbcConfig = new JdbcConfig();
private XmlConfigReader() {
SAXReader reader = new SAXReader();
//启动一个线程来调用
//拿到当前线程
//在拿到当前的ClassLoader(装载器),把xml文件作为一个资源装在
//取得资源名称,如果资源有目录就加上路径名称
//返回一个InputStream
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
try {
//doc对应xml文件
Document doc = reader.read(is);
//selectObject可以传xPath表达式
//取得jdbc相关的value
Element driverNameEle = (Element) doc.selectObject("/config/db-info/driver-name");
Element url = (Element) doc.selectObject("/config/db-info/url");
Element userName = (Element) doc.selectObject("/config/db-info/user-name");
Element passWord = (Element) doc.selectObject("/config/db-info/password");
//设置jdbc相关的value
jdbcConfig.setDriverName(driverNameEle.getStringValue());
jdbcConfig.setUrl(url.getStringValue());
jdbcConfig.setUserName(userName.getStringValue());
jdbcConfig.setPassWord(passWord.getStringValue());
//System.out.println(strDriverName);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//加同步
public static synchronized XmlConfigReader getInstance(){
if(instance == null){
instance = new XmlConfigReader();
}
return instance;
}

public JdbcConfig getJdbcConfig(){
return jdbcConfig;
}

public static void main(String[] args){
JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
//System.out.println(jdbcConfig.getDriverName());
//System.out.println(jdbcConfig.getUrl());
//System.out.println(jdbcConfig.getUserName());
System.out.println(jdbcConfig);
}


}

在用java读取这些的时候需要引入dom4j和jaxen包。引入这些包才能使用相应类。dom4j是一个java的xml-api。利用这里面的类和方法能很好的操纵xml文件。jaxen包主要是能用来传xPath,这个的意思就是xml文件里面的一二三级目录,在java中表现出来就是"/config/db-info/driver-name"。这样就可以从config下找到db-info,在db-info下找到driver-name.