バナー画像

XML(Extensible Markup Language)について

XML(Extensible Markup Language)とは、任意の用途向けにデータ構造をシンプルに表現したマークアップ言語のことです。

マークアップ言語とは、タグと値のセットで構成され、文章を構造化する言語をいいます。

例えば、Webサイト作成で使われる HTML言語 が有名どころのマークアップ言語ですね。

HTMLがWebサイトの情報を記述するる言語に対し、XMLはデータ交換のための汎用のデータ形式となっています。

XMLの特徴
  • インターネット上での使いやすさ
  • 広くさまざまなアプリケーションをサポート
  • XML文書を処理するプログラムを簡単に記述可能
  • オプション機能を可能な限りゼロに
  • 規則に従っており簡潔である
  • 読みやすくて分かりやすい
  • すぐに作成可能

これらの特徴があるのがXMLです。

また、XMLで書かれた文書のことを「XMLドキュメント」と言います。

XMLドキュメントは、タグと値のセットで文書を記述していきます。

文書の記述ルールは下記の通りです。

<要素名 属性=”値”>内容</要素名>

要素名のタグ <要素名> を用意し、この中に内容・値を記述します。

要素名には属性も付けられるようになっています。

そして、 </要素名> で要素タグを閉じます。

JavaでXMLを出力する方法

ここでは、JavaでXMLファイルを出力する方法を見ていきましょう。

サンプルコードは下記の通りです。

■記述例
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class WriteXML {
     public static void main(String[] args) {

          DocumentBuilder builder = null;

          try {
               builder = DocumentBuilderFactory.newInstance()
                         .newDocumentBuilder();
          } catch (ParserConfigurationException e) {
               e.printStackTrace();
          }

          Document doc = builder.newDocument();
          Element info = doc.createElement("info");
          doc.appendChild(info);

          Element name01 = doc.createElement("name");
          name01.setAttribute("id", "P001");
          name01.appendChild(doc.createTextNode("Potepan Style"));
          info.appendChild(name01);

          Element name02 = doc.createElement("name");
          name02.setAttribute("id", "P002");
          name02.appendChild(doc.createTextNode("Potepan Tarou"));
          info.appendChild(name02);

          File file = new File("Sample.xml");
          writexml(file, doc);
     }

     public static boolean writexml(File file, Document doc) {

          Transformer tf = null;

          try {
               TransformerFactory factory = TransformerFactory
                         .newInstance();
               tf = factory.newTransformer();
          } catch (TransformerConfigurationException e) {
               e.printStackTrace();
               return false;
          }

          tf.setOutputProperty("indent", "yes");
          tf.setOutputProperty("encoding", "UTF-8");

          try {
               tf.transform(new DOMSource(doc), new StreamResult(
                         file));
          } catch (TransformerException e) {
               e.printStackTrace();
               return false;
          }

          return true;
     }
}

サンプルコードの内容を簡単に見ていきましょう。

DocumentBuilder builder = null;

  try {
    builder = DocumentBuilderFactory.newInstance()
                         .newDocumentBuilder();
  } catch (ParserConfigurationException e) {
    e.printStackTrace();
  }

Document doc = builder.newDocument();

上記の部分で、Documentインスタンスの作成を行っています。

DocumentBuilderクラスは、XML文書からDOM(Document Object Model)のDocumentインスタンスを取得するAPIです。

DOMというのは、XML文書にアクセスするためのオブジェクトモデルとその標準インタフェースに関する規格ですね。

要素がノードで表現され、ノードの関係がノードツリーで表現されます。

DocumentBuilder.newDocumentメソッドを利用し、DOMオブジェクトの新しいインスタンスを doc として保持しています。

Element info = doc.createElement("info");
doc.appendChild(info);
Element name01 = doc.createElement("name");
name01.setAttribute("id", "P001");
name01.appendChild(doc.createTextNode("Potepan Style"));
info.appendChild(name01);
Element name02 = doc.createElement("name");
name02.setAttribute("id", "P002");
name02.appendChild(doc.createTextNode("Potepan Tarou"));
info.appendChild(name02);
File file = new File("Sample.xml");
writexml(file, doc);

documentメソッドを使って、要素や属性を作成しました。

それぞれのメソッドは、次のような役割を果たしています。

public static boolean writexml(File file, Document doc) {

  Transformer tf = null;

  try {
    TransformerFactory factory = TransformerFactory.newInstance();
    tf = factory.newTransformer();
  } catch (TransformerConfigurationException e) {
    e.printStackTrace();
    return false;
  }

  tf.setOutputProperty("indent", "yes");
  tf.setOutputProperty("encoding", "UTF-8");

  try {
    tf.transform(new DOMSource(doc), new StreamResult(file));
  } catch (TransformerException e) {
    e.printStackTrace();
    return false;
  }

  return true;
}

最後に、writexml関数でXMLファイルの作成・出力をしています。

Transformerは、ソースコードの記述内容を結果ツリーへ変換処理しています。

Transformerインスタンスを生成し、改行指定やエンコーディングの設定をした上で、trasformメソッドでXMLファイルを作成する流れです。

上記のサンプルプログラムを実行すると、同ディレクトリにSample.xmlが出力されます。

中身を確認すると、下記のように記述されているはずです。

■実行結果
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<info>
    <name id="P001">Potepan Style</name>
    <name id="P002">Potepan Tarou</name>
</info>

XMLのインデント出力

JavaでXMLのインデントは下記の部分で設定しています。

tf.setOutputProperty("indent", "yes");

yesにすることでインデントあり、noにすることでなしになります。

先ほどのサンプルではインデントありにしましたので、ここではnoで出力結果を見てみましょう。

次のように記述します。

tf.setOutputProperty("indent", "no");

実行結果は下記の通り、全てが1文で出力されます。

■実行結果
<?xml version="1.0" encoding="UTF-8" standalone="no"?><info><name id="P001">Potepan Style</name><name id="P002">Potepan Tarou</name></info>

XML出力の文字コード指定

文字コードの出力は下記の部分で設定しています。

tf.setOutputProperty("encoding", "UTF-8");

今回は「UTF-8」にしていますが、他にも「Shift-JIS」など文字コードは変更可能です。

文字コードを指定する場合は、第二引数に好きな文字コードを指定しましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。