エントリーにXMLでデータを埋め込むプラグイン(その2)

昨日の続きで、エントリーにXMLでデータを埋め込むプラグインを紹介します。
今日は、このプラグインで追加されるテンプレートタグの書き方です。

MTEntryXMLタグ/MTEntryIfXMLタグ

MTEntryXMLタグは、エントリーに入れたXMLの全体を表すコンテナタグです。
このコンテナの中に、データを取り出すためのタグを入れます。
また、MTEntryIfXMLタグは、エントリーにXMLのデータが含まれるかどうか(<XMLRecord>~</XMLRecord>)を調べる条件タグです。
エントリーからXMLのデータを取り出したいときには、まずこれらのタグを以下のように組み合わせます。

<MTEntryIfXML>
<MTEntryXML>
データを取り出すタグ
</MTEntryXML>
</MTEntryIfXML>

MTEntryXMLValueタグ

XML内の特定の要素の値を取り出すタグです。
nameアトリビュートで要素の値を指定します。

例えば、エントリーの中に以下のようにXMLを入れたとします。

<!--
<XMLRecord>
<width>150</width>
<height>100</height>
</XMLRecord>
-->

この場合、「<$MTEntryXMLValue name="width"$>」とすると、XML内のwidth要素の値(150)が出力されます。
同様に、「<$MTEntryXMLValue name="height"$>」とすると、「100」が出力されます。

MTEntryXMLFieldsタグ

XML内で要素が階層化されているときに、ある要素を基準に、その下の階層にあるすべての要素を取り出すためのコンテナタグです。
基準となる要素の名前は、nameアトリビュートで指定します。

例えば、エントリーに以下のようにXMLを入れたとします。

<!--
<XMLRecord>
<productinfo>
  <name>foo</name>
  <price>1500</price>
</productinfo>
<size>
  <width>150</width>
  <height>100</height>
</size>
</XMLRecord>
-->

上記のXML内の各要素を取り出すには、以下のようにタグを組みます。

<MTEntryIfXML>
<MTEntryXML>
<MTEntryXMLFields name="productinfo">
Name : <MTEntryXMLValue name="name"><br />
Price : <MTEntryXMLValue name="price"><br />
</MTEntryXMLFields>
<MTEntryXMLFields name="size">
WIdth : <MTEntryXMLValue name="width"><br />
Height : <MTEntryXMLValue name="height"><br />
</MTEntryXMLFields>
</MTEntryXML>
</MTEntryIfXML>

MTEntryXMLIfFieldsタグ

XML内に、指定した名前の要素があるかどうかを調べる条件タグです。
要素の名前はnameアトリビュートで指定します。

例えば、「width」という名前の要素があるときだけ何かを出力する場合は、以下のようにタグを組みます。

<MTEntryIfXML>
<MTEntryXML>
<MTEntryXMLIfFields name="width">
出力する内容
</MTEntryXMLIfFields>
</MTEntryXML>
</MTEntryIfXML>

ただし、要素は現在処理中の階層からのみ検索されます。
ある階層の直下に、特定の要素があるかどうかを調べたい場合は、まずMTEntryXMLFieldsタグを使ってその階層の要素を取り出し、そのコンテナの中でMTEntryXMLIfFieldsタグを使います。

MTEntryXMLFieldCountタグ

特定の名前の要素がいくつあるかを出力する変数タグです。
要素を配列化した際に利用します。
なお、要素の配列化については明日解説します。

MTEntryBodyCutCommentタグ

このプラグインではエントリーにXMLを入れますが、そのままだとMTEntryBodyタグの出力にXMLがそのまま含まれてしまいます。
以下のように、MTEntryBodyタグをMTEntryBodyCutCommentタグのコンテナで囲むと、MTEntryBodyタグの出力から、XMLとその前後のコメントタグが取り除かれます。

<MTEntryBodyCutComment><$MTEntryBody$></MTEntryBodyCutComment>