apache jakarta commonsのconfigurationをXPathを使って利用するひとつの方法 2007/04/06

apache jakarta commonsのconfigurationをXPathを使って利用するひとつの方法です。


configurationは便利だなと思います。
アプリケーションの内部の設定をconfigurationを使って、出し入れしたり、新たに項目を追加してみます。

新しく要素を追加する場合は、getで値がとれるかどうかチェックしたのちに、addメソッドを使用しています。



import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;

public class Z5 {

static String xml = "<root><test name=\"01\"><item>item1</item></test></root>";

public static void main(String[] args) throws ConfigurationException,
UnsupportedEncodingException {

XPathExpressionEngine engine = new XPathExpressionEngine();
XMLConfiguration configuration = new XMLConfiguration();
configuration.setExpressionEngine(engine);
configuration.load(new ByteArrayInputStream(xml.getBytes("utf-8")));

// 定義済み
print(configuration.getString("test[@name='01']/item"));

// 定義済みの値を書き換え
configuration.setProperty("test[@name='01']/item", "書き換え");

// 定義済みの要素に新しく要素を追加
configuration.addProperty("test[@name='01'] item", "200");

// 要素があるか調べる
String s = configuration.getString("test[@name='02']/@name", null);

// 要素がなければ追加するというロジック
if (s == null) {
// 要素を追加し、name属性に値を入れている
configuration.addProperty("/ test@name", "02");
}

StringWriter writer = new StringWriter();
configuration.save(writer);

writer.flush();
print("" + writer);

}

static void print(String s) {
System.out.println(s);
}
}



実行結果

item1
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test name="01">
<item>書き換え</item>
<item>200</item>
</test>
<test name="02"/>
</root>

: