フィルタは、XML検索式を表すパスであるXMLデータに対してだけでなく、フィルタ中のパスの任意の要素や属性に対しても指定できます。
このようなフィルタの再帰的な指定を使用することで、複雑な階層や繰り返し構造をもつXMLデータに対して、柔軟な絞込み条件の指定を行うことができます。
以下の2つの条件をXML検索式で表します。
パス“/電話帳/個人/@性別”で表す属性の値が、“男性”であるXMLデータ
パス“/電話帳/個人/名前”で表す要素の値が、“田中”であるXMLデータ
/[電話帳/個人/@性別 = " 男性" and 電話帳/個人/名前 =" 田中" ]
上記のXML検索式は、“繰り返し構造をもつXMLデータ”のXMLデータ1とXMLデータ2の両方に一致する条件となります。
また、「性別が“男性”である“田中”さんが、所属する支社の電話帳」に対して、一致する条件を指定したい場合は、以下のように要素“個人”に対してフィルタを指定します。
/[電話帳/個人[@性別 = " 男性" ]/名前 = " 田中" ]
上記のXML検索式は、“繰り返し構造をもつXMLデータ”のXMLデータ2にだけ一致します。
フィルタを要素や属性に対して指定した場合は、フィルタ内の相対パスは、フィルタを付加した要素や属性からの相対指定となります。
<?xml version='1.0' encoding='UTF-16' ?> <電話帳 支社='東京'> <代表>03-xxxx-yyyy</代表> <個人 性別='女性'> <名前>田中</名前> <番号>03-xxxx-yyyy</番号> </個人> <個人 性別='男性'> <名前>鈴木</名前> <番号>03-xxxx-yyyy</番号> </個人> <個人 性別='男性'> <名前>佐藤</名前> <番号>03-xxxx-yyyy</番号> </個人> </電話帳>
<?xml version='1.0' encoding='UTF-16' ?> <電話帳 支社='名古屋'> <代表>052-xxx-yyyy</代表> <個人 性別='男性'> <名前>田中</名前> <番号>052-xxxx-yyyy</番号> </個人> <個人 性別='男性'> <名前>林</名前> <番号>052-xxxx-yyyy</番号> </個人> <個人 性別='女性'> <名前>森</名前> <番号>052-xxx-yyyy</番号> </個人> </電話帳>