ページの先頭行へ戻る
Interstage Data Effector リファレンス集
Interstage

3.2.9 フィルタ式

フィルタ式は、パス式で指定した要素ノードに閉じた範囲で、条件を指定する場合に使用します。フィルタ式は、入力ファイルタイプがXML形式の場合だけ、有効です。
リターン式でフィルタ式の示すノードの集まりを参照する場合は、バインド変数宣言を指定してフィルタ式の示すノードの集まりとバインド変数を関連付けます。

フィルタ式の定義を以下の図に示します。


図3.30 フィルタ式の定義

ポイント

バインド変数名とは、フィルタ式によって選択されたノードの集まりに名前を付けたものです。


注意

  • フィルタ式の条件にフィルタ式を入れ子にできます。その場合の入れ子の階層は、8階層までです。

  • フィルタ式のパス式の最後の要素に、パス要素“*”は指定できません。

参照

リターン式でのバインド変数参照については、“3.7.1 抽出機能のリターン式”を参照してください。

変数

バインド変数宣言に付ける名前を指定します。バインド変数の値は、バインド変数宣言のフィルタ式のパスが示す要素ノードの中で、フィルタ式の条件を満たすものの集まりを表します。

バインド変数宣言がフィルタ式の内側にある場合、そのバインド変数の値は外側のフィルタ式の条件を満たすノードの中からさらに内側のフィルタ式の条件を満たすものの集まりを表します。指定可能な文字列については、“導入・運用ガイド”の“項目名・タグ名・略称・ラベルで指定可能な文字”を参照してください。

バインド変数宣言

フィルタ式にバインド変数宣言を指定する場合は、以下に注意してください。

注意

  • バインド変数宣言を指定する場合、フィルタ式のパス式にはパス要素“*”、パス演算子“//”を含めることはできません。

  • バインド変数宣言を指定したフィルタ式が他のフィルタ式の内側に入れ子として指定されている場合、バインド変数宣言を指定したフィルタ式を含んでいる外側のすべてのフィルタ式のパス式にも、前項の制限が適用されます。


例1

/root/company/employeeが示す要素ノードの範囲で、名前(name)がtanakaでかつ、idが1000のデータを検索します。

文書A
<root>
  <company>
    <employee>
      <name>tanaka</name>
      <id>1000</id>
    </employee>
  </company>
  <company>
    <employee>
      <name>suzuki</name>
      <id>2000</id>
    </employee>
  </company>
</root>
文書B
<root>
  <company>
    <employee>
      <name>tanaka</name>
      <id>2000</id>
    </employee>
  </company>
  <company>
    <employee>
      <name>suzuki</name>
      <id>1000</id>
    </employee>
  </company>
</root>
条件
/root/company/employee{/name = '^tanaka' AND /id = '1000'}
結果

例の検索式の場合、文書Aは条件に該当し、文書Bは該当しません。
“/root/company/employee”で1つの区切りと考えます。文書Aの場合は、中括弧({})の条件に該当するデータが存在します。文書Bの場合は、中括弧({})の条件(/name = '^tanaka' AND /id = '1000')に該当するデータが存在しません。

例2

/root/denpyoが示す要素ノードの範囲で、日付(date)が2009年6月11日である伝票と、各伝票の中でタイプ(type)がBである項目だけを選んで出力します。

文書C
<root>
  <denpyo>
    <date>2009/06/11</date>
    <item type="A">value1</item>
    <item type="B">value2</item>
  </denpyo>
  <denpyo>
    <date>2009/06/15</date>
    <item type="A">value3</item>
    <item type="B">value4</item>
  </denpyo>
  <denpyo>
    <date>2009/06/11</date>
    <item type="C">value5</item>
    <item type="D">value6</item>
  </denpyo> 
</root>
条件
{$x/date, $y} $x := /root/denpyo{ /date == '2009/06/11' AND $y := /item{ /@type = 'B'} }

xおよびyは、バインド変数です。

結果
<root>
 <denpyo>
  <date>2009/06/11</date>
  <item type="B">value2</item>
 </denpyo>
</root

注意

フィルタ式のパス式の最後の要素に、パス要素“*”は指定できません。必ず要素名を指定してください。

例3

以下の場合、パス式の最後のパス要素に“*”を指定しているので、エラーになります。

/root//company/*{/name = '^tanaka' AND /id = '1000'}