Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■Jakarta Commons Configuration version1.1 - XML でプロパティ追加、ファイルに書き込む

XMLConfiguration でプロパティを追加

XMLConfiguration を使っているときのプロパティ追加。
addProperty(String, Object) を使うのは PropertyConfiguration と違わないが、扱っているのが XML なのでキーの指定の仕方にルールがあります。
大まかには、

といった具合に読み込みの時のキーの指定と変わらない。
これに加えて追加の時にはインデックスの指定の仕方に独特のルールがあります。

1. インデックスに (-1) を指定したとき

要素名のインデックスに -1 を指定したときはその要素が新しく追加されます。
例えば

<A>
    <B>
        <C>値</C>
    </B>
    <B>
    </B>
</A>

という XML がある時に、addProperty("B(-1).C", "addValue") とした時の結果のイメージは

<A>
    <B>
        <C>値</C>
    </B>
    <B>
    </B>
    <B>
        <C>addValue</C>
    </B>
</A>

といった具合です。最後に要素 B が新しく追加されてその中に C とその値が追加されているのがわかると思います。

2. インデックスを指定しなかったとき

同じ要素が複数ある場合でインデックスを指定しなかったときは一番最後の要素を指定したのと同じになります。

<A>
    <B>
        <C>値</C>
    </B>
    <B>
    </B>
</A>

に、addProperty("B.C", "addValue") とした時の結果のイメージは

<A>
    <B>
        <C>値</C>
    </B>
    <B>
        <C>addValue</C>
    </B>
</A>

です。

以上、XMLConfiguration を使っているときのプロパティ追加のポイントでした。
ちなみにプロパティ更新の時も似たようなもんです。

ファイルに書き込む

XML ファイルに書き出すのはプロパティファイルの時と同じで save() メソッドを呼び出してやればいい。
save() メソッドには引数の有無や型の違いでいくつかバリエーションがあるのでその時々で適当なのを使えば OK。

例によって例のごとく、使うときの注意点。
version 1.0 の実装ではどうやら出力の際に xml 宣言のエンコーディング指定がされていない様子。
なので出力された XML のエンコーディングがファイルの実際のエンコーディングにかかわらず UTF-8 になってしまいます。
何か細工をしたりしない限り、書き込みの必要がある場合はエンコーディングを UTF-8 にしておく方がよさげです。

サンプルコード

今回のサンプルは適当にプロパティを追加したあとファイルに書き込みます。
まずは読み込む XML ファイル test1.xml 。

<?xml version="1.0" encoding="UTF-8" ?>

<zoo>
    <lion>
        <name>ライオ</name>
    </lion>
    <tiger color="white">
        <name>虎ゾー</name>
    </tiger>
    <tiger color="yellow">
        <name>トラコ</name>
    </tiger>
</zoo>

そしてメインになる部分です。

package javademo.config;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;

public class Run {

    public static void main(String[] args){
        try{
            XMLConfiguration config = new XMLConfiguration("test1.xml");

            config.addProperty("tiger(1).name", "ライジン");
            config.addProperty("lion(-1).name", "ライコ");
            config.addProperty("lion.name[@gao]", "1");
            config.save();
            
        }
        catch(ConfigurationException e){
            e.printStackTrace();
            System.exit(1);
        }
    }
}

まとめ

XMLConfiguration でプロパティを追加するときのポイントは次のとおり。

XML ファイルの書き込みをするときには、save メソッドを使う。
ただし version 1.0 の実装では xml 宣言のエンコーディングが UTF-8 になるので注意。