Apache Commons Configurationを使うと、XMLが簡単に読み込めます。
Apache Commons Configurationの入手
mavenを使って入手
pom.xmlは、こんな感じ。
今回はXML操作なので、Apache Commonsの中でも「Apache Commons Configuration」が対象。
また、「Commons BeanUtils」が必要ですので、一緒に入手しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-configuration2</artifactId> <version>2.10.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.4</version> </dependency> |
手動で入手
手動で入手するのであれば、以下のjarを入手することになります。
面倒だと思います。
https://mvnrepository.com/repos/central
- commons-beanutils-1.9.4.jar
- commons-collections-3.2.2.jar
- commons-configuration2-2.10.1.jar
- commons-lang3-3.14.0.jar
- commons-logging-1.3.0.jar
- commons-text-1.11.0.jar
※2024年4月現在です。
ちなみに、Apache License 2.0で提供されています。
Apache Commons Configurationを使って、XMLを読み込むサンプル
Apache Commons Configurationを使って、XMLを読み込み。
読み込んだ内容を出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import java.util.List; import org.apache.commons.configuration2.HierarchicalConfiguration; import org.apache.commons.configuration2.XMLConfiguration; import org.apache.commons.configuration2.builder.fluent.Configurations; import org.apache.commons.configuration2.tree.ImmutableNode; public class XmlReadTest { public static void main(String[] args) { Configurations configs = new Configurations(); try { XMLConfiguration config = configs.xml("D:\\work\\test.xml"); System.out.println(createHeader(config)); System.out.println(createDetail(config)); } catch (Exception e) { e.printStackTrace(); } } public static String createHeader(XMLConfiguration config) { return new StringBuilder() .append("---") .append(config.getString("additional.title")) .append("(") .append(config.getString("additional[@update]")) .append(")---") .toString(); } public static String createDetail(XMLConfiguration config) { StringBuilder sb = new StringBuilder(); List<HierarchicalConfiguration<ImmutableNode>> itemList = config.configurationsAt("item-list.item"); for(HierarchicalConfiguration item : itemList) { sb.append(item.getString("name")) .append(":") .append(item.getString("price")) .append(System.lineSeparator()); } return sb.toString(); } } |
この例で読み込むXMLは、こちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <price-list> <item-list> <item> <name>りんご</name> <price>100</price> </item> <item> <name>とまと</name> <price>80</price> </item> <item> <name>きゃべつ</name> <price>150</price> </item> </item-list> <additional update="2024-01-01"> <title>今日の特売</title> </additional> </price-list> |
実行結果
読み込んだXMLファイルの情報が出力されます。
1 2 3 4 | ---今日の特売(2024-01-01)--- りんご:100 とまと:80 きゃべつ:150 |
サンプルの解説
Configurations#xml(String)でXMLファイルを読み込みます。
あとは、XMLConfigurationで読むだけです。
階層構造が保持されているので、階層構造のままタグ名をくっつけて、getString(String)しましょう。
この例の明細のように、部分的な階層を取得したいときのために、HierarchicalConfigurationのようなクラスが用意されています。
こちらは部分的なので、以降の部分のタグ名を使いましょう。