本格的にXPathとXSLTを使う
何事も基礎をしっかり固めていれば、後は実装とテストの繰り返しの中で本格的な技術が身に付きます。ただし、基礎ほど難しいものはありません。前編同様、今回の後編も構文をすべて説明するわけではありません。基礎を固めていくうえで肝となる概念を丹念に説明します。
筆者の経験で、ある電子申請システムにおいて、XML文書を法改正に伴い変更するという作業がありました。改正後のXML文書は兄弟が親になり、兄弟が子の繰り返しになり、新しい属性が増えたりと、本当に変換可能かさえ判断がつきませんでした。それを乗り越えるためには再帰的なテンプレートの適用を習得する必要がありますが、再帰関数の開発経験があれば非常に難しいというわけでもありません。今回はその説明は行いませんが、まずは基礎を固め、実戦で通用するようになることを目標とします。
前編では簡単なXML文書をHTMLファイルに出力し、ブラウザで表示させただけでした。これだけでもXPathやXSLTに対する「とっつきにくさ」は解消されたのではないかと思います。今回はXSLTのもっとも一般的な使い方であるXML文書からXML文書への変換を中心に説明します。前編で説明したリスト1のMeigara.xmlを、リスト2の新しいXML文書であるshop.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>
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>