一个读取xml文件内容的类

  • 来源: www.web-xy.com 作者: 若水   2008-05-05/15:17
  • 一个读取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.*;

    /**
    * <p>Title: <font color="steelblue" size="10">读取xml文件信息</font></p>
    * <p>Description: <font color="steelblue">从XML配置文件中获得配置信息。excerpt form jdom。</font></p>
    * <p>Copyright: <font color="steelblue">Copyright (c) 2004</font></p>
    * <p>Company: <font color="steelblue">Harmonious</font></p>
    * @author <font color="steelblue">TZL</font>
    * @version <font color="steelblue">1.0</font>
    */

    public class XMLReader {
    /*
    #设置根的输出配置,格式为 "info [2004-05-01 22:35:30] [name]logname(b.c) [line] 86 msg-->log信息"
    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;

    /**
    * <font color="orange">构造函数。</font>
    * @param xmlFile <font color="steelblue">要读取的配置文件的绝对路径。</font>
    */
    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.nbspdoc = 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());
    }
    }

    /**
    * <font color="orange">构造函数。配置文件必须指定为发布的应用的根目录下的/XmlConfig/Config.xml。</font>
    * @param servletObj <font color="steelblue">随便一个HttpServlet对象。</font>
    */
    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.nbspdoc = 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());
    }
    }

    /**
    * <font color="orange">web应用发布在web服务器的绝对路径根目录,最后已经有目录分割符。</font>
    * @return <font color="tomato">返回web应用发布在web服务器的绝对路径的根目录。</font>#p#分页标题#e#
    */
    public String getWebAppPath() {
    return m_webAppPath;
    }

    /**
    * <font color="orange">从配置文件中获得配置信息。</font>
    * @param key <font color="steelblue">要获取的配置名称。</font>
    * @param curRootName <font color="steelblue">查找的起始节点名称,如果为null从根开始查找。</font>
    * @return <font color="tomato">配置的字符串。</font>
    */
    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;
    }

    /**
    * <font color="orange">根据名字获得节点。广度遍历,递归调用。</font>
    * @param nodeName <font color="steelblue">节点的名字。</font>
    * @param curRoot <font color="steelblue"> 从开始查找的起始节点,如果为null从根开始查找。</font>
    * @return <font color="tomato">返回从指定节点下找到的第一个节点。如果没有返回null。</font>
    */
    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;
    }

    /**
    * <font color="orange">获得指定节点的属性。</font>
    * @param elementName <font color="steelblue">节点的名称。</font>
    * @param attName <font color="steelblue">要获得的属性的名称。</font>
    * @return <font color="tomato">要查找的属性的值。</font>
    */
    public String getElementAtrribute(String elementName, String attName)
    {
    Element el = getElement(null, elementName);
    if (null == el)
    return null;

    return el.getAttributevalue(attName);
    }

    }

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多