SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今からでも遅くない、JAXPを学ぼう!

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

本格的に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>

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
基本はツリーとノードを理解すること

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
今からでも遅くない、JAXPを学ぼう!連載記事一覧
この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5155 2010/06/08 23:42

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング