XPath式内の空白について(Oracle XML DB)
Oracle XML DBに格納したXMLの要素検索に全角および半角スペースが無視されて困ってました。正確には、全角スペースが半角に置き換わって、複数の半角スペースが連結されて一つになります。ちょっと調べたら、これはXMLの仕様で、XML Schemaに「whiteSpace value="preserve"」を追加したら、空白が保存されるようになりました。そういえば、HTMLに複数の空白を書いても1つ分しか表示されないのと同じ動作ですね。
これで取得するXMLデータには、空白が残るようになったのですが、下のようなXPath式を使った検索条件では、やっぱり空白が連結されてしまいました。とりあえず、今回は検索条件のほうを s/[ \s]+/\s/g して対応しました。と、ここまで書いて、タブ文字も考慮する必要があることに気が付いちゃったり_| ̄|○
# Oracle 9iはSchema定義を変更するとテーブルを作り直さなきゃいけないのがたまにキズ。
# 10gなら再作成の必要はないらしい。
これで取得するXMLデータには、空白が残るようになったのですが、下のようなXPath式を使った検索条件では、やっぱり空白が連結されてしまいました。とりあえず、今回は検索条件のほうを s/[ \s]+/\s/g して対応しました。と、ここまで書いて、タブ文字も考慮する必要があることに気が付いちゃったり_| ̄|○
SELECT * FROM xml_table
WHERE existsNode(xml_data,'/emp[name="空白 3つ"]') = 1
# Oracle 9iはSchema定義を変更するとテーブルを作り直さなきゃいけないのがたまにキズ。
# 10gなら再作成の必要はないらしい。
perm link: http://yamashita.dyndns.org/blog/199/









