<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    使用commons的Configuration讀取XML

    Posted on 2008-03-20 12:06 qiyadeng 閱讀(3625) 評(píng)論(1)  編輯  收藏
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <gui-definition>
      <colors>
        <background>#808080</background>
        <text>#000000</text>
        <header>#008000</header>
        <link normal="#000080" visited="#800080"/>
        <default>${colors.header}</default>
      </colors>
      <rowsPerPage>15</rowsPerPage>
      <buttons>
        <name>OK,Cancel,Help</name>
      </buttons>
      <numberFormat pattern="###\,###.##"/>
    </gui-definition>
    以上是個(gè)很簡單的XML,首先肯定是把這個(gè)文件載入(就把上面這個(gè)文件命名為table.xml吧)
    try
    {
        XMLConfiguration config = new XMLConfiguration("tables.xml");
        // do something with config
    }
    catch(ConfigurationException cex)
    {
        // something went wrong, e.g. the file was not found
    }
    如果導(dǎo)入的時(shí)候沒有異常的話,config對(duì)象就可以使用了,讀取的方法如下:
    String backColor = config.getString("colors.background");
    String textColor = config.getString("colors.text");
    String linkNormal = config.getString("colors.link[@normal]");
    String defColor = config.getString("colors.default");
    int rowsPerPage = config.getInt("rowsPerPage");
    List buttons = config.getList("buttons.name");
    下面說明下需要注意的幾個(gè)地方:
    1.首先根元素是被忽略的,在上面的例子中不是寫gui-definition.colors.text,而是寫成colors.text。
    2.使用“.”符號(hào)訪問子元素。在上面的例子中訪問<colors>元素中的<text>,對(duì)應(yīng)的key是colors.text。
    3.訪問元素屬性的方法類似XPath的方法。
    4.返回的是list的元素,可以用getList()方法。就像上面例子中的buttons.name的內(nèi)容是"OK,Cancel,Help",用getList()
    方法返回的是3個(gè)元素組成的List。這里的分隔符是“,”,可以通過setDefaultDelimiter()方法進(jìn)行指定。
    5.可以操作propertiesConfiguration,就像是例子中的<default>元素。
    上面是個(gè)最簡單的XML格式,但是還有些相對(duì)復(fù)雜的XML,如下:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    
    <database>
      <tables>
        <table tableType="system">
          <name>users</name>
          <fields>
            <field>
              <name>uid</name>
              <type>long</type>
            </field>
            <field>
              <name>uname</name>
              <type>java.lang.String</type>
            </field>
            <field>
              <name>firstName</name>
              <type>java.lang.String</type>
            </field>
            <field>
              <name>lastName</name>
              <type>java.lang.String</type>
            </field>
            <field>
              <name>email</name>
              <type>java.lang.String</type>
            </field>
          </fields>
        </table>
        <table tableType="application">
          <name>documents</name>
          <fields>
            <field>
              <name>docid</name>
              <type>long</type>
            </field>
            <field>
              <name>name</name>
              <type>java.lang.String</type>
            </field>
            <field>
              <name>creationDate</name>
              <type>java.util.Date</type>
            </field>
            <field>
              <name>authorID</name>
              <type>long</type>
            </field>
            <field>
              <name>version</name>
              <type>int</type>
            </field>
          </fields>
        </table>
      </tables>
    </database>
    像上面例子中用tables.table.name key去取得表格的名字,返回的是什么類型呢?因?yàn)閠ables.table.name中的table和name
    有兩個(gè)地方都出現(xiàn)了。其實(shí)返回的是個(gè)Collection,
    Object prop = config.getProperty("tables.table.name");
    if(prop instanceof Collection)
    {
    	System.out.println("Number of tables: " + ((Collection) prop).size());
    }
    其實(shí)也可以用getList()方法來操作,這里如果你只想得到第一個(gè)tables.table.name,需要使用getString()方法就可以了。
    還有另外一個(gè)問題我們可以用getList()方法取到tables.table.fields.field.name,但是其實(shí)這些filed.name并不是屬于同
    一個(gè)table,這樣的話,就需要使用如下的方法:
    List fields = config.configurationsAt("tables.table(0).fields.field");
    for(Iterator it = fields.iterator(); it.hasNext();)
    {
        HierarchicalConfiguration sub = (HierarchicalConfiguration) it.next();
        // sub contains now all data about a single field
        String fieldName = sub.getString("name");
        String fieldType = sub.getString("type");
        ...

    第一行中是使用configurationsAt的方法是為了,省略在下面子元素前全路徑。在實(shí)際應(yīng)用中可能不一定會(huì)直接指定table(0),這可以結(jié)合上面的Object prop = config.getProperty("tables.table.name")進(jìn)行迭代。

    Feedback

    # re: 使用commons的Configuration讀取XML  回復(fù)  更多評(píng)論   

    2008-03-21 00:13 by Jam Chan
    挺好用喲!

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本免费高清视频| 色多多免费视频观看区一区| 中文字幕在线免费看线人| 亚洲成av人片在线观看天堂无码 | 永久黄色免费网站| 伊人久久综在合线亚洲2019| 91人成网站色www免费下载| 亚洲AV无码AV男人的天堂| 免费人成在线观看网站| 久久久久久亚洲精品成人| 免费观看无遮挡www的小视频| 亚洲国产美女精品久久| 99re热免费精品视频观看 | 成人影片一区免费观看| 亚洲成人动漫在线| 免费不卡视频一卡二卡| 亚洲国产精品精华液| 亚洲精品456播放| 久久99毛片免费观看不卡| 亚洲福利一区二区精品秒拍| 毛片a级毛片免费播放下载| MM1313亚洲国产精品| 亚洲夜夜欢A∨一区二区三区| 日韩精品久久久久久免费| 久久久久精品国产亚洲AV无码| 拔擦拔擦8x华人免费久久| www在线观看播放免费视频日本| 亚洲国产精品成人精品无码区在线| 99视频在线免费看| 亚洲AV无码XXX麻豆艾秋| 精品国产亚洲男女在线线电影| 久久99精品国产免费观看| 亚洲中文字幕乱码一区| 国产精品亚洲玖玖玖在线观看| 无码日韩精品一区二区三区免费 | 性生交片免费无码看人| 四虎精品免费永久免费视频| 久久久婷婷五月亚洲97号色| 国产成人高清精品免费软件| a级日本高清免费看| 亚洲中文字幕一区精品自拍|