首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 高手解析 XML 配置檔案讀取操作(SAX 解析實戰)

     編輯:Java 程式設計入門

Java 與 XML 是黃金組合。XML 在電子商務資料交換中不可替代,但在一般系統開發中,不一定需要資料交換,是否就無法使用 XML?當然不是。新趨勢是 Java 程式的配置檔採用 XML 格式(早期用 Windows INI 格式,Java 有 Properties 類處理)。採用 XML 作配置檔好處多多,從 Tomcat、J2EE 配置檔即可見 XML 普及應用。

如何讀取 XML 配置檔?

主流 XML 解析器有 DOM 與 SAX。Apache XML 專案組有 Xerces、Xalan、Cocoon 等專案。Tomcat 用 Sun 的 JAXP,XSL Taglib 用 Xerces。

實際切入:程式中常需根據主機環境決定的變數(如資料庫帳號密碼),只需修改 XML 配置檔即可移植。範例 myenv.xml 放在 Tomcat 的 WEB-INF/classes 目錄:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <dbhost>localhost</dbhost>
    <sqlname>sqlname</sqlname>
    <username>username</username>
    <passWord>password</passWord>
</config>

編寫 Java 程式讀取並提取 dbhost、dbuser、dbpassword 供其他程式存取資料庫。SAX 逐行讀取適合大檔案,DOM 一次性載入記憶體不適合大檔。此處採用 SAX 解析(基於 JDK 1.4 改進實測)。

解析程式 ConfigParser

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import java.util.Properties;

public class ConfigParser extends DefaultHandler {
    private Properties props;
    private String currentSet;
    private String currentName;
    private StringBuffer currentValue = new StringBuffer();

    public ConfigParser() { this.props = new Properties(); }
    public Properties getProps() { return this.props; }

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        currentValue.delete(0, currentValue.length());
        this.currentName = qName;
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        currentValue.append(ch, start, length);
    }

    public void endElement(String uri, String localName, String qName) throws SAXException {
        props.put(qName.toLowerCase(), currentValue.toString().trim());
    }
}

解析程式簡單易懂。解析出的屬性存放在 props 中,但外部程式尚無法存取,需再撰寫封裝類別 ParseXML:

import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.net.URL;

public class ParseXML {
    private Properties props;
    public Properties getProps() { return this.props; }

    public void parse(String filename) throws Exception {
        ConfigParser handler = new ConfigParser();
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(false);
        factory.setValidating(false);
        SAXParser parser = factory.newSAXParser();

        // 取得配置檔路徑 (Tomcat 中在 WEB-INF/classes)
        URL confURL = BeansConstants.class.getClassLoader().getResource(filename);

        try {
            parser.parse(confURL.toString(), handler);
            props = handler.getProps();
        } finally {
            factory = null;
            parser = null;
            handler = null;
        }
    }
}

至此,即可在應用程式中呼叫 ParseXML 取得配置屬性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved