本書は、SQL Anywhere OpenXMLfunction を使用して、特殊文字が含まれている可能性のある文字列ノード要素を扱っているユーザを対象としています。
SQL Anywhere の OPENXML 関数で使用される XML 解析メカニズムは、いくつかの特殊文字を文字列ノード内のリテラル文字として処理しませんが、代わりに、そのノードを分割します。これらの文字には以下のものが含まれます
(ただし、これらに限定されるわけではありません)。" (引用符), &
(アンパサンド), < (<) and > (>)
これを示すために、マニュアルに記載されている以下の例を使用します。
例1
このクエリは以下の結果セットを提供します。
結果セット1
以下の例 2 に示すように、これらのアンパサンドや引用符などの特殊文字を追加する場合:
例2
問題は、XML が 3 つの子を持つ要素ノードとして解析されることです。たとえば、"301"
ローでは、最初の子はテキスト・ノード "Tee"、2 番目はエンティティ・リファレンス・ノード、3
番目はテキスト・ノード "Shirt" です。エンティティ・リファレンス・ノードは、1
つのテキスト・ノード '"' を子として持っています。一方、text() は単に最初のノードを返します。その結果ユーザは、結果セット
2 ではなく、最初のノードの終わりで prod_name がトランケートされている予想外の結果セットを得ます。
結果セット3
完全な文字列が必要な場合は、サブツリー内の 3 つのテキスト・ノードを連結する必要があります。例
2 のように表示される結果セットを実現するには、‘text() ‘ を ‘.’ に置き換える必要があります。
例3
|