Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus XML Processor ユーザーズガイド


5.4.3 サンプルプログラム(SampleDOM.java)

サンプルプログラムを次に示します。

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.xml.sax.SAXException;
import org.w3c.dom.*;
 
public class SampleDOM
{
  public static final void main(String[] args)
  {
    try{
      new SampleDOM().CreateXMLFile();
      new SampleDOM().GetStringFromXML();
    }catch(Exception exception){
      exception.printStackTrace();
    }
  }
 
  //XMLファイルを作成する
  public final void CreateXMLFile()
  {
    try{
      DocumentBuilderFactory dbf =
          DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
 
      Document doc = db.newDocument();
      Element parent = doc.createElement("伝票");
 
      Element sub = doc.createElement("商品");
      Element leaf1 = doc.createElement("商品名");
      Element leaf2 = doc.createElement("単価");
      Element leaf3 = doc.createElement("数量");
      leaf1.appendChild(doc.createTextNode("テレビ"));
      sub.appendChild(leaf1);
      leaf2.appendChild(doc.createTextNode("15000"));
      sub.appendChild(leaf2);
      leaf3.appendChild(doc.createTextNode("14"));
      sub.appendChild(leaf3);
      parent.appendChild(sub);
 
      sub = doc.createElement("商品");
      leaf1 = doc.createElement("商品名");
      leaf2 = doc.createElement("単価");
      leaf3 = doc.createElement("数量");
      leaf1.appendChild(doc.createTextNode("ラジオ"));
      sub.appendChild(leaf1);
      leaf2.appendChild(doc.createTextNode("3500"));
      sub.appendChild(leaf2);
      leaf3.appendChild(doc.createTextNode("6"));
      sub.appendChild(leaf3);
      parent.appendChild(sub);
 
      sub = doc.createElement("商品");
      leaf1 = doc.createElement("商品名");
      leaf2 = doc.createElement("単価");
      leaf3 = doc.createElement("数量");
      leaf1.appendChild(doc.createTextNode("ビデオ"));
      sub.appendChild(leaf1);
      leaf2.appendChild(doc.createTextNode("21000"));
      sub.appendChild(leaf2);
      leaf3.appendChild(doc.createTextNode("4"));
      sub.appendChild(leaf3);
      parent.appendChild(sub);
 
      doc.appendChild(parent);
 
      OutputStream os =
          new BufferedOutputStream(
          new FileOutputStream("SampleDOM.xml"));
      TransformerFactory tf =
          TransformerFactory.newInstance();
      Transformer tran = tf.newTransformer();
      tran.setOutputProperty("encoding", "Shift_JIS");
      tran.setOutputProperty("indent", "yes");
      tran.transform(new DOMSource(doc),
          new StreamResult(os));
 
      os.flush();
      os.close();
 
    }catch(ParserConfigurationException e){
      e.printStackTrace();
    }catch(TransformerConfigurationException e){
      e.printStackTrace();
    }catch(TransformerException e){
      e.printStackTrace();
    }catch(IOException e){
      e.printStackTrace();
    }
  }
 
  //CreateXMLFileで作成したXMLファイルからデータを取得して計算する
  public final void GetStringFromXML()
  {
    try{
      int tvPrice = 0;
      int radioPrice = 0;
      int videoPrice = 0;
 
      DocumentBuilderFactory factory =
          DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
 
      Document doc = builder.parse("SampleDOM.xml");
      Element element1 = doc.getDocumentElement();
      NodeList nodelist1 = element1.getElementsByTagName("商品");
 
      //商品の数だけループをまわす
      for(int nShouhin = 0 ;
          nShouhin < nodelist1.getLength() ; nShouhin++){
        String str = new java.lang.String();
        int price = 0;
        int number = 0;
        Element element2 = (Element)nodelist1.item(nShouhin);
 
        //商品名の取得
        NodeList nodelist2 =
            element2.getElementsByTagName("商品名");
        Node node1 = nodelist2.item(0);
        if(node1.getNodeType() == Node.ELEMENT_NODE){
          Element element3 = (Element)node1;
          NodeList nodelist3 = element3.getChildNodes();
          Node node2 = nodelist3.item(0);
          str = node2.getNodeValue();
        }
 
        //商品名に対する単価の取得
        nodelist2 = element2.getElementsByTagName("単価");
        node1 = nodelist2.item(0);
        if(node1.getNodeType() == Node.ELEMENT_NODE){
          Element element3 = (Element)node1;
          NodeList nodelist3 = element3.getChildNodes();
          Node node2 = nodelist3.item(0);
          price = Integer.parseInt(node2.getNodeValue());
        }
 
        //商品名に対する数量の取得
        nodelist2 = element2.getElementsByTagName("数量");
        node1 = nodelist2.item(0);
        if(node1.getNodeType() == Node.ELEMENT_NODE){
          Element element3 = (Element)node1;
          NodeList nodelist3 = element3.getChildNodes();
          Node node2 = nodelist3.item(0);
          number = Integer.parseInt(node2.getNodeValue());
        }
 
        //各商品の小計を計算する
        if(str.equals("テレビ")){
          tvPrice = price * number;
        }else if(str.equals("ラジオ")){
          radioPrice = price * number;
        }else if(str.equals("ビデオ")){
          videoPrice = price * number;
        }
      }
      int sum = tvPrice + radioPrice + videoPrice;
      System.out.println("合計は" + sum + "円です。");
    }catch(ParserConfigurationException e){
      e.printStackTrace();
    }catch(SAXException e){
      e.printStackTrace();
    }catch(IOException e){
      e.printStackTrace();
    }
  }
}