技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

xmlファイルから特定のタグの値を抽出する。

Javaxml ファイルから特定のタグの値を抽出するプログラムを作成した。
使い方は以下の通り。

java XmlTagValueReader "xmlファイルのパス" "対象のタグ名"

例えば、以下の xml ファイルと、「name」を引数として与えると、
apple, lemon が抽出される。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>apple</name>
    <color>red</color>
    <name>lemon</name>
    <color>yellow</color>
  </food>
</foods>


作成したプログラムは以下。ファイルを一行一行読み込みながら、正規表現で欲しい箇所を抽出している。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class XmlTagValueReader {
    public static void main(String[] args) {
        String filePath = args[0];
        String targetTag = args[1];
        String start = ".*<" + targetTag + ".*>";
        String end = "</" + targetTag + ">.*";

        // 正規表現のAPIの使い方は以下を参照した。
        // https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html
        String regex = start + "(.*)" + end;
        Pattern pattern = Pattern.compile(regex);

        try {
            File file = new File(filePath);
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                Matcher matcher = pattern.matcher(line);
                if (matcher.matches()) {
                    String value = matcher.group(1);
                    System.out.println(value);
                }
            }
            br.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Javaxml ファイルを扱うということで、DOM や XPath などの API を使用することも考えたが、やりたいことはシンプルなので、それらのAPIは使用しなかった。