Title: 读取xml文件信息
*Description: 从XML配置文件中获得配置信息。excerpt form jdom。
*Copyright: Copyright (c) 2004
*Company: Harmonious
* @author TZL * @version 1.0 */public class XMLReader { /* #设置根的输出配置,格式为 'info [2004-05-01 22:35:30] [name]logname(b.c) [line] 86 msglog信息' log4j.rootLogger=DEBUG, rootAppender log4j.appender.rootAppender=org.apache.log4j.RollingFileAppender log4j.appender.rootAppender.File=e:/MapXtremeSmpl.log log4j.appender.rootAppender.MaxFileSize=1000KB log4j.appender.rootAppender.layout=org.apache.log4j.PatternLayout log4j.appender.rootAppender.layout.ConversionPattern=%-5p [%d{yyyy-mm-dd HH:mm:ss}] [name] %c{2} [line] %L msg %m%n */ static public Logger log = Logger.getLogger(XMLReader.class); protected Element m_RootElement = null; protected String m_webAppPath = null; /** * 构造函数。 * @param xmlFile 要读取的配置文件的绝对路径。 */ public XMLReader(String xmlFile) { m_webAppPath = null; try { PatternLayout layout = new PatternLayout('%-5p %d{yyyy-MM-dd HH:mm:ss} [name] %c{2} [line] %L [msg] %m%n'); ConsoleAppender appender = new ConsoleAppender(/*new SimpleLayout(),*/layout, 'System.err'); log.addAppender(appender); SAXBuilder builder = new SAXBuilder(); Document doc = null; doc = builder.build(new FileInputStream(xmlFile)); m_RootElement = doc.getRootElement(); } catch (IOException ex) { log.error('XMLReader构造时出现IO错误:' + ex.toString()); } catch (JDOMException ex1) { log.error('XMLReader构造时分析XML文件出错:' + ex1.toString()); } catch (Exception ex) { log.error('XMLReader 构造出错:' + ex.toString()); } } /** * 构造函数。配置文件必须指定为发布的应用的根目录下的/XmlConfig/Config.xml。 * @param servletObj 随便一个HttpServlet对象。 */ public XMLReader(HttpServlet servletObj) { m_webAppPath = servletObj.getServletContext().getRealPath('/'); String configFileName = m_webAppPath + 'XmlConfig/Config.xml'; try { PatternLayout layout = new PatternLayout('%-5p %d{yyyy-MM-dd HH:mm:ss} [name] %c{2} [line] %L [msg] %m%n'); ConsoleAppender appender = new ConsoleAppender( /*new SimpleLayout(),*/layout, 'System.err'); log.addAppender(appender); SAXBuilder builder = new SAXBuilder(); Document doc = null; doc = builder.build(new FileInputStream(configFileName)); m_RootElement = doc.getRootElement(); } catch (IOException ex) { log.error('XMLReader构造时出现IO错误(/XmlConfig/Config.xml):' + ex.toString()); } catch (JDOMException ex1) { log.error('XMLReader构造时分析XML文件出错(/XmlConfig/Config.xml):' + ex1.toString()); } catch (Exception ex) { log.error('XMLReader构造出错(/XmlConfig/Config.xml):' + ex.toString()); } } /** * web应用发布在web服务器的绝对路径根目录,最后已经有目录分割符。 * @return 返回web应用发布在web服务器的绝对路径的根目录。 */ public String getWebAppPath() { return m_webAppPath; } /** * 从配置文件中获得配置信息。 * @param key 要获取的配置名称。 * @param curRootName 查找的起始节点名称,如果为null从根开始查找。 * @return 配置的字符串。 */ public String getElementValue(String curRootName, String key) { String value = null; Element curRoot = getElement(null, curRootName); if (null == curRoot) { curRoot = m_RootElement; } Element keyNode = getElement(curRoot, key); if (null != keyNode) { value = keyNode.getTextTrim(); } return value; } /** * 根据名字获得节点。广度遍历,递归调用。 * @param nodeName 节点的名字。 * @param curRoot 从开始查找的起始节点,如果为null从根开始查找。 * @return 返回从指定节点下找到的第一个节点。如果没有返回null。 */ private Element getElement(Element curRoot, String nodeName) { Element retElement = null; if (null == nodeName) return m_RootElement; if (null == curRoot) { curRoot = m_RootElement; } if (null != curRoot) { retElement = curRoot.getChild(nodeName); if (null == retElement) { List nestElements = curRoot.getChildren(); Iterator iterator = nestElements.iterator(); while (iterator.hasNext() && null == retElement) { retElement = getElement( (Element) iterator.next(), nodeName); } } } return retElement; } /** * 获得指定节点的属性。 * @param elementName 节点的名称。 * @param attName 要获得的属性的名称。 * @return 要查找的属性的值。 */ public String getElementAtrribute(String elementName, String attName) { Element el = getElement(null, elementName); if (null == el) return null; return el.getAttributeValue(attName); }} Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd