当前页面: 开发资料首页 → Java 专题 → 一个读取xml文件内容的类
一个读取xml文件内容的类
摘要: 一个读取xml文件内容的类 
 内容: package project.util.xml;
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
import org.apache.log4j.*;
import org.jdom.*;
import org.jdom.input.*;
/**
 * 
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 
 
↑返回目录 
前一篇: 
在java里面调用CUI程序的方法   
后一篇: 
SWT代码研究(2)