dom4jを使用して、指定されたノードから子ノードデータを抽出します。
1.このJavaコードをMain.javaというファイルに入れます。
import java.util.*;
import java.io.*;
import org.dom4j.*;
import org.dom4j.io.*;
class Foo{
String moo;
String baz;
}
class Main{
public static Document parse(String filePath) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(filePath);
return document;
}
public static void main(String[] args){
try{
File f = new File("/tmp/myxml.xml");
Document document = parse(f.toString());
List list = document.selectNodes("//penguins/PieHole");
Foo foo = new Foo();
Iterator iter=list.iterator();
while(iter.hasNext()){
Element element=(Element)iter.next();
foo.moo = element.selectSingleNode("cupcake").getText();
foo.baz = element.selectSingleNode("montana").getText();
}
System.out.println("foo.moo: " + foo.moo);
System.out.println("foo.baz: " + foo.baz);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("done");
}
}
2.これを/tmp/myxml.xmlというファイルに入れます。
<?xml version="1.0" encoding="utf-8"?>
<penguins>
<mars>129</mars>
<PieHole>
<cupcake>value inside cupcake</cupcake>
<montana>value inside montana</montana>
</PieHole>
</penguins>
2.これらのjarファイルをMain.javaと同じディレクトリのlibというディレクトリに配置します。
dom4j-1.6.1.jar
jaxen-1.1.1.jar
3.プログラムをコンパイルし、ターミナルから実行します。
javac -cp .:./lib/* Main.java
java -cp .:./lib/* Main
4.出力を解釈します。
eric@defiant ~/code/java/run04 $ javac -cp .:./lib/* Main.java
eric@defiant ~/code/java/run04 $ java -cp .:./lib/* Main
foo.moo: value inside cupcake
foo.baz: value inside montana
done
5.何が起こったのですか?
これはJavaバージョン1.7.0を使用し、dom4jバージョン1.6.1ライブラリとjaxen1.1.1サポートライブラリをインポートします。ユーザーが作成したxmlドキュメントをインポートします。次に、SAXReaderを使用してそれをドキュメントタイプに解析します。selectNodes(string)メソッドを使用して、PieHolexmlタグを取得します。すべてのPieHolexmlタグについて、カップケーキタグとモンタナタグを取得し、それらをFooクラスに配置します。最後に、Fooの中にあったものを印刷します。