目次へ

解答例 - 実習課題1 - 10.JAXB(2)

(実習課題1)

商品情報を表すXML文書を読み込み、価格が最も高い商品の情報を表示するコンソールプログラムを作成しなさい。例えば、以下のようなXML文書があったとします。

product.xml
<?xml version="1.0"?>
<products>
  <product>
    <name>ゼロからはじめるJava</name>
    <price>1905</price>
  </product>
  <product>
    <name>ゼロからはじめるJ2EE</name>
    <price>2095</price>
  </product>
</products>

プログラムを実行すると以下のように表示されます。

$java MostExpensiveProduct product.xml

product.xmlの商品の中で最も高価な商品は、「ゼロからはじめるJ2EE」、価格は2095円です。

前章の実習課題で作成したスキーマやJAXBにより自動生成したクラス(Products、Product...)を使用しなさい。また、XML文書を読み込む場合には妥当性を検証し、妥当でない場合はエラーメッセージを出力しなさい。

解答例

/**
 * MostExpensiveProduct.java
 * 
 * TECHSCORE Java XML DOM XSLT 10章 実習課題1
 * 
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.dom.chapter10.exercise1;

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import com.techscore.dom.jaxb.Product;
import com.techscore.dom.jaxb.Products;

public class MostExpensiveProduct {

    public static void main(String[] args) {

        try {
            JAXBContext jc = JAXBContext.newInstance("com.techscore.dom.jaxb");
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            unmarshaller.setValidating(true);

            Products products = (Products) unmarshaller.unmarshal(new File(args[0]));
            List productList = products.getProduct();

            int max_price = 0;
            int product_id = 0;
            for (int i = 0; i < productList.size(); i++) {
                Product product = (Product) productList.get(i);
                if (max_price < Integer.parseInt(product.getPrice())) {
                    max_price = Integer.parseInt(product.getPrice());
                    product_id = i;
                }
            }

            System.out.println(args[0] + "の商品の中でもっとも高価な商品は「"
                    + ((Product) productList.get(product_id)).getName()
                    + "」、価格は" + max_price + "円です。");

        } catch (JAXBException e) {
            System.err.println("指定されたXML文書は妥当ではありません。");
        }
    }
}

▼product.xml

<?xml version="1.0" encoding="EUC-JP"?>
<products>
  <product>
    <name>ゼロからはじめるJava</name>
    <price>1905</price>
  </product>
  <product>
    <name>ゼロからはじめるJ2EE</name>
    <price>2095</price>
  </product>
</products>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp