apache jakarta commonsのconfigurationをXPathを使って利用するひとつの方法
2007/04/06
java
xpath
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>
: