CodeZine(コードジン)

特集ページ一覧

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

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

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

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

目次

基本はツリーとノードを理解すること

ノードを整理

 前編で「ノードから構成されるツリー」などという表現を使いましたが、具体的にノードとは何かということについては説明しませんでした。実は、このノードを理解しないとXPath式は書けないと言っても過言ではないのです。まずはノードの種類をXML Path Language (XPath) Version 1.0を参考に次に示します。

ルートノード

 XML文書そのものを指します。ファイルシステムのルートと同じです。ロケーションパス(後述)でも「/」のように記述する点でも似ています。Meigara.xmlのMEIGARASやshop.xmlのSHOPはルートノードの子ノードになる点に注意してください。

要素ノード

 XML文書の要素とノードが同じものを表すと思いがちですが、要素もノードの1つです。

テキストノード

 文字データはグループ化されノードとなります。従ってテキストノードの前後の兄弟ノードにテキストノードは存在しません。

属性ノード

 属性もまたノードになります。要素ノードは関連する属性ノードの親となります。ただし、属性ノードはその要素ノードの子ではありません。

名前空間ノード

 名前空間もまたノードになります。要素ノードは名前空間ノードの親となります。ただし、名前空間ノードはその要素ノードの子ではありません。名前空間ノードでは理解は簡単ですが、属性ノードがなぜ要素ノードの子ではないのか最初は戸惑います。

処理命令ノード

 処理命令もまたノードになります。ただし、文書タイプ宣言内の処理命令は例外です。

コメントノード

 属性、名前空間、処理命令がノードだと言われれば、そういう構造も可能だと受け入れることはできますが、コメントもノードだと言われると少し疑いたくなります。しかし、コメントもまたノードです。

shop.xmlをツリーで表現

 表1のノード一覧を参考に図1にMeigara.xml、図2にshop.xmlをツリー構造として表現しています。見やすいように、MEIGARAの子要素はVOLUMEとPRICEを割愛しています。また、MEIGARA要素も3つ存在しますが、最初の1件のみとしています。

図1.Meigara.xmlのツリー構造
図1.Meigara.xmlのツリー構造
図2.shop.xmlのツリー構造
図2.shop.xmlのツリー構造

 XSLTにおいて空白文字とは、スペース、復帰、改行、タブの4つを指します。従って、ルートノードとMEIGARAS要素ノード(Meigara.xmlの場合)またはSHOP要素ノード(shop.xmlの場合)以外は必ず、空白文字に囲まれています。


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

バックナンバー

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

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5