Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

今からでも遅くない JAXPを学ぼう!(後編)
XPathとXSLTを掘り下げる

XML文書を他のXML文書に変換する

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/06/07 14:00

ダウンロード サンプルコード (3.8 KB)

 前編ではXPathとXSLTの概略を説明し、簡単なXML文書をHTMLに変換しブラウザに表示しました。しかし、業務システムにおいては変換可能かさえわからない要求が出ることもあります。後編の今回は、その時の準備としてXPathとXSLTについて掘り下げて説明します。

目次

本格的にXPathとXSLTを使う

 何事も基礎をしっかり固めていれば、後は実装とテストの繰り返しの中で本格的な技術が身に付きます。ただし、基礎ほど難しいものはありません。前編同様、今回の後編も構文をすべて説明するわけではありません。基礎を固めていくうえで肝となる概念を丹念に説明します。

 筆者の経験で、ある電子申請システムにおいて、XML文書を法改正に伴い変更するという作業がありました。改正後のXML文書は兄弟が親になり、兄弟が子の繰り返しになり、新しい属性が増えたりと、本当に変換可能かさえ判断がつきませんでした。それを乗り越えるためには再帰的なテンプレートの適用を習得する必要がありますが、再帰関数の開発経験があれば非常に難しいというわけでもありません。今回はその説明は行いませんが、まずは基礎を固め、実戦で通用するようになることを目標とします。

 前編では簡単なXML文書をHTMLファイルに出力し、ブラウザで表示させただけでした。これだけでもXPathやXSLTに対する「とっつきにくさ」は解消されたのではないかと思います。今回はXSLTのもっとも一般的な使い方であるXML文書からXML文書への変換を中心に説明します。前編で説明したリスト1のMeigara.xmlを、リスト2の新しいXML文書であるshop.xmlに変換することから始めましょう。

リスト1.Meigara.xml
001:<?xml version="1.0" encoding="UTF-8"?>
002:<MEIGARAS>
003:    <MEIGARA>
004:        <NAME>がんこ焼酎屋</NAME>
005:        <ABV>25</ABV><!-- alcohol by volume(アルコール度数)の略 -->
006:        <VOLUME>1800</VOLUME>
007:        <PRICE>2630</PRICE>
008:    </MEIGARA>
009:    <MEIGARA>
010:        <NAME>一壺春</NAME>
011:        <ABV>25</ABV>
012:        <VOLUME>720</VOLUME>
013:        <PRICE>1360</PRICE>
014:    </MEIGARA>
015:    <MEIGARA>
016:        <NAME>杜氏潤平紅芋原酒</NAME>
017:        <ABV>38</ABV>
018:        <VOLUME>500</VOLUME>
019:        <PRICE>2050</PRICE>
020:    </MEIGARA>
021:</MEIGARAS>
リスト2.shop.xml
001:<?xml version="1.0" encoding="UTF-8"?>
002:<SHOP>
003:    <GREETING OWNER="tomoharu">店主の好みの芋焼酎を厳選しました。</GREETING>
004:    <MEIGARAS>
005:        <MEIGARA>
006:            <NAME KANA="がんこしょうちゅうや">がんご焼酎屋</NAME><!-- 銘柄名 -->
007:            <ABV UNIT="%">25</ABV><!-- alcohol by volume(アルコール度数)の略 -->
008:            <VOLUME UNIT="ml">1800</VOLUME>
009:            <PRICE UNIT="円">2630</PRICE>
010:            <MANUFACTURER>大石酒造</MANUFACTURER>
011:        </MEIGARA>
012:        <MEIGARA>
013:            <NAME KANA="いっこしゅん">一壺春</NAME>
014:            <ABV UNIT="%">25</ABV>
015:            <VOLUME UNIT="ml">720</VOLUME>
016:            <PRICE UNIT="円">1360</PRICE>
017:            <MANUFACTURER>古澤醸造</MANUFACTURER>
018:        </MEIGARA>
019:        <MEIGARA>
020:            <NAME KANA="とうじじゅんぺいべにいもげんしゅ">杜氏潤平紅芋原酒</NAME>
021:            <ABV UNIT="%">38</ABV>
022:            <VOLUME UNIT="ml">500</VOLUME>
023:            <PRICE UNIT="円">2050</PRICE>
024:            <MANUFACTURER>小玉醸造</MANUFACTURER>
025:        </MEIGARA>
026:    </MEIGARAS>
027:</SHOP>

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 川久保 智晴(カワクボ トモハル)

    haruプログラミング教室(https://haru-idea.jp/)主宰。 COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP, &nbsp;C#, JavaScript...

バックナンバー

連載:今からでも遅くない、JAXPを学ぼう!
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5