要素名を取得して XML でデータを出力したいのですが、特定の要素の下のデータを取得する方法がわかりません。
これが XML サンプルと私のコードです。
<mdb>
<movies>
<movie id="godfather">
<title>The Godfather</title>
<year>1972</year>
<directors>
<director idref="francisfordcoppola"/>
</directors>
<genres>
<genre>Crime</genre>
<genre>Drama</genre>
</genres>
<cast>
<performer>
<actor idref="marlonbrando"/>
<role>Don Vito Corleone</role>
</performer>
</cast>
</movie>
</movies>
<performer id="kimnovak">
<name>Marilyn Pauline Novak</name>
<dob>1933-02-13</dob>
<pob>Chicago, Illinois, USA</pob>
<actedin>
<movie idref="vertigo"/>
</actedin>
</performer>
</mdb>
try {
File fXmlFile = new File(filename);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
NodeList nodes = doc.getElementsByTagName("movie");
System.out.println("nodes length"+ nodes.getLength());
for (int i = 0; i < nodes.getLength(); i++){
Element element = (Element) nodes.item(i);
NodeList name = element.getElementsByTagName("title");
Element line = (Element) name.item(0);
System.out.println(": " + line.getFirstChild().getTextContent());
映画内の要素のみを取得したい。ただし、次のコード
<movie idref="vertigo"/>
は実行者の内部も読み取ります (コンテンツを取得したい場合は Nullpointer 例外が発生します)。DOMを使用してパフォーマンスの下での読み取りを回避する方法があるかどうか疑問に思っていますか?
NodeList nodes = doc.getElementsByTagName("movie");
最初のムービーの最終出力は次のようになります。
('godfather', 'The Godfather', '1972', 'Crime;Drama')