Use Jdom to Read XML file
2010-12-06 18:46
375 查看
package com.jadyer.bean; /** * 封装Jdom读取XML文件所得到的节点内容 */ public class JdbcInfo { private String driverClass; private String url; private String userName; private String password; /*--四个属性对应的getter和setter略--*/ @Override public String toString() { return "driverClass=" + driverClass + "/nurl=" + url + "/nuserName=" + userName + "/npassword=" + password; } }
<?xml version="1.0" encoding="UTF-8"?> <!-- 这是一个XML格式的全局配置文件,用以被Jdom读取之用 --> <sys-configure> <jdbc-info> <driver-class>oracle.jdbc.OracleDriver</driver-class> <url>jdbc:oracle:thin:@127.0.0.1:1521:ora10</url> <username>scott</username> <password>moon</password> </jdbc-info> <beans> <bean id="com.jadyer.blog.dao.LinkDao" class="com.jadyer.blog.dao.hibernate.LinkDaoHibernate"/> <bean id="com.jadyer.vote.dao.UserDao" class="com.jadyer.vote.dao.hibernate.UserDaoHibernate"/> </beans> </sys-configure>
package com.jadyer.util; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; import com.jadyer.bean.JdbcInfo; /** * 采用JDOM读取XML配置文件 * @see 该类使用了单态模式 */ public class XMLConfigReader { private static XMLConfigReader instance = new XMLConfigReader(); private static final String CONFIG_FILE_NAME = "gobal-configure.xml"; private Element rootElt; //得到了Element之后,就相当于得到了整个文件一样 private JdbcInfo jdbcInfo = new JdbcInfo(); //JdbcInfo类的toString()被我们重写了 private Map beanMap = new HashMap(); private XMLConfigReader() { //使用Jdom中的SAXBuilder类读配置文件 SAXBuilder sb = new SAXBuilder(); try { //在sb的build()方法中需要指定文件路径。currentThread()返回当前执行的线程。getResourceAsStream()返回读取指定资源的输入流 Document doc = sb.build(Thread.currentThread().getContextClassLoader().getResourceAsStream(CONFIG_FILE_NAME)); //取得配置文件的根。也就是把<sys-configure>取到了 //然后也可以通过rootElt.getChildren()一层一层的向下读取节点内容。就好像得到它的孩子一样 //不过这么做比较麻烦,所以这里介绍另一种方法:采用XPath直接定位到具体的元素上,更简单、更块 rootElt = doc.getRootElement(); this.initJdbcInfo(); this.initBeans(); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void initJdbcInfo() { try { //获得配置文件中的单个节点 Element driverClassNameElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/driver-class"); //获取并输出配置文件中<driver-class-name>的值 //System.out.println(driverClassNameElt.getText()); //将读取到的配置文件中的<driver-class-name>值放到一个对象中 jdbcInfo.setDriverClass(driverClassNameElt.getText()); Element urlElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/url"); jdbcInfo.setUrl(urlElt.getText()); Element userNameElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/username"); jdbcInfo.setUserName(userNameElt.getText()); Element passwordElt = (Element) XPath.selectSingleNode(rootElt, "//sys-configure/jdbc-info/password"); jdbcInfo.setPassword(passwordElt.getText()); } catch (JDOMException e) { e.printStackTrace(); } } private void initBeans() { try { List beanList = XPath.selectNodes(rootElt, "//sys-configure/beans/bean"); //返回配置文件中的多个结点。所返回的List中的元素是一个由许多Element组成的 //它每一个结点都是Element,所以直接循环List取Element就可以了 for (Iterator iter = beanList.iterator(); iter.hasNext();) { Element beanElt = (Element) iter.next();// 在Jdom中每一个节点都是Element String id = beanElt.getAttributeValue("id");// 获取元素的属性所对应的值 String className = beanElt.getAttributeValue("class"); //System.out.println("id=" + id); //System.out.println("class=" + className); //通过反射的方式将字符串实例化成一个对象,然后再放到Map中 Object obj=Class.forName(className).newInstance(); beanMap.put(id, obj); } } catch (JDOMException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static XMLConfigReader getInstance() { return instance; } public JdbcInfo getJdbcInfo() { return jdbcInfo; } public Object getBean(Class c){ //将Class的name作为KEY值。这里Class.getName()会得到类的完整路径,即包名加类名 return beanMap.get(c.getName()); } public static void main(String[] args) { System.out.println(XMLConfigReader.getInstance().getJdbcInfo()); //这里没有传字符串,即没有把com.jadyer.blog.dao.LinkDao当作参数传进来 //若输入字符串,则可能会写错。将类作为参数传递,则不会出错。因为写错类名时会自动报错 //LinkDao linkDao = (LinkDao)GlobalConfigure.getInstance().getBean(LinkDao.class); } }
相关文章推荐
- Use Jdom to Write XML file
- Use MemoryMapFile to read large file
- How to Read XMLDocument into a SQL Sever XML field / saving XML to database or filesystem...best method?
- Error:Failed to load project configuration:xxxxxxxxxxxxxxxxxxxx cannot read file .idea/misc.xml
- How To Use LoadImage() to Read a BMP File(转载)
- Use jQuery To Retrieve Data From An XML File
- Use eof() to read and display a text file.
- IDEA | Error:Failed to load project configuration:xxx cannot read file .idea/misc.xml
- A simple way to read an XML file in Java
- Step By Step guide to Read XML file in Java Using SAX Parser Example
- How to Parse or Read XML File in Java >> XML Tutorial Example
- ffmpeg示例一:how to use libavformat and libavcodec to read video from a file.
- Use Dom4J to Write XML file
- about how to read the complicated xml file
- How To Read XML File In Java – (DOM Parser)
- Read XML file easily with LINQ to XML
- Use Haskell ByteString to Read/Write File
- How To Read XML File In Java – (SAX Parser)
- python use dom to write xml file
- How to read whole file? (C++)