範例一:解析XML配置


  • 基於XML檔案的基礎設定格式如下, 為了配合測試程式碼, 請將該檔案命名為configuration.xml並放置在config_home路徑下的cfgs目錄裡:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- XML根节点为properties -->
    <properties>
    
        <!-- 分类节点为category, 默认分类名称为default -->
        <category name="default">
    
            <!-- 属性标签为property, name代表属性名称, value代表属性值(也可以用property标签包裹) -->
            <property name="company_name" value="Apple Inc."/>
    
            <!-- 用属性标签表示一个数组或集合数据类型的方法 -->
            <property name="products">
                <!-- 集合元素必须用value标签包裹, 且value标签不要包括任何扩展属性 -->
                <value>iphone</value>
                <value>ipad</value>
                <value>imac</value>
                <value>itouch</value>
            </property>
    
            <!-- 用属性标签表示一个MAP数据类型的方法, abc代表扩展属性key, xyz代表扩展属性值, 扩展属性与item将被合并处理  -->
            <property name="product_spec" abc="xzy">
                <!-- MAP元素用item标签包裹, 且item标签必须包含name扩展属性(其它扩展属性将被忽略), 元素值由item标签包裹 -->
                <item name="color">red</item>
                <item name="weight">120g</item>
                <item name="size">small</item>
                <item name="age">2015</item>
            </property>
        </category>
    </properties>
  • 新設定​​類別DemoConfig, 透過@Configuration註解指定設定檔相對路徑

    @Configuration("cfgs/configuration.xml")
    public class DemoConfig extends DefaultConfiguration {
    }
  • 測試程式碼, 完成模組初始化並載入設定檔內容:

    public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            DemoConfig _cfg = new DemoConfig();
            if (Cfgs.get().fillCfg(_cfg)) {
                System.out.println(_cfg.getString("company_name"));
                System.out.println(_cfg.getMap("product_spec"));
                System.out.println(_cfg.getList("products"));
            }
        } finally {
            YMP.get().destroy();
        }
    }
  • 執行結果:

    Apple Inc.
    {abc=xzy, color=red, size=small, weight=120g, age=2015}
    [itouch, imac, ipad, iphone]
#