カテゴリ:

半構造化データ関数と構造化データ関数 (解析)

PARSE_XML

入力文字列を XML ドキュメントとして解釈し、 OBJECT 値を生成します。入力が NULL の場合、出力は NULL です。

こちらもご参照ください。

CHECK_XML

構文

PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )
Copy
PARSE_XML( STR => <string_containing_xml>
  [ , DISABLE_AUTO_CONVERT => <disable_auto_convert> ] )
Copy

引数

必須:

string_containing_xml . OR . STR => string_containing_xml

この式は VARCHAR に評価する必要があります。VARCHAR には有効な XML が含まれている必要があります。

オプション:

disable_auto_convert . OR . DISABLE_AUTO_CONVERT => disable_auto_convert

string_containing_xml の数値およびブール値を関数によってSnowflakeデータ型に変換するかどうかを指定するブール式。(この変換の詳細については、以下の 使用上の注意 をご参照ください)。

  • 関数でこれらの値を変換 しない 場合は、これを TRUE に設定します。これには、 CREATE FILE FORMATDISABLE_AUTO_CONVERT パラメーターと同様の効果があります。

  • 関数でこれらの値を変換する場合は、これを FALSE に設定するか、この引数を省略します。

デフォルト: FALSE

戻り値

戻り値のデータ型は OBJECT です。OBJECT には、 XML の内部表現が含まれています。

使用上の注意

  • すべての引数を名前または位置のいずれかで指定する必要があります。一部の引数を名前で、他の引数を位置で指定することはできません。

    引数を名前で指定する場合は、引数名を二重引用符で囲むことはできません。

  • XML ドキュメントにある要素のコンテンツはすべてテキストです。PARSE_XML は、一部の XML データをテキストからネイティブ(Snowflake SQL) SQL データ型リファレンス に変換しようとします。

    • NUMERIC および BOOLEAN:

      PARSE_XML は、明らかに数値およびブールである値を、これらの値が印刷されると、テキスト上で同一の結果が生成されるネイティブ表現に変換しようとします。たとえば、10進数を解析するとき、 PARSE_XML は、123.45を DOUBLEではなく NUMBER(5,2)として処理することにより、表現の正確さを保持しようとします。ただし、

      • 科学表記法の数値(1.2345e +02など)、または範囲またはスケールの制限のために固定小数点として保存できない数値は、 DOUBLE として保存されます。

      • XML 要素の内容が小数点以下の数字の場合、 PARSE_XML は後続のゼロを切り捨てる可能性があります。

      関数でこの変換を実行しない場合は、 disable_auto_convert 引数に TRUE を渡します。

    • TIMESTAMP, DATE, TIME, BINARY:

      XML は、 TIMESTAMP、 DATE、 TIME、または BINARY などの値をネイティブに表さないため、これらは XML 内で文字列として表される必要があります。PARSE_XML は、これらの値を自動的に認識しません。これらは文字列として保持されるため、ユーザーは、必要に応じて値を文字列からネイティブ SQL データ型に変換する必要があります。

  • XML 属性は、名前/値のペアの 順不同 コレクションです。PARSE_XML 関数は必ずしも順序を保持しません。たとえば、テキストを XML に変換してからテキストに戻すと、異なる順序で元の情報を含む文字列が生成される場合があります。

  • 文字列から XML に変換する際に、要素間の空白に変化が見られる場合があります。

次の例は、 PARSE_XML 関数を使用して XML の文字列を OBJECT 列に挿入できる OBJECT に変換する方法を示しています。

CREATE TABLE xtab (v OBJECT);

INSERT INTO xtab SELECT PARSE_XML(column1) AS v
  FROM VALUES ('<a/>'), ('<a attr="123">text</a>'), ('<a><b>X</b><b>Y</b></a>');

SELECT * FROM xtab;
Copy
+-------------------------+
|           V             |
+-------------------------+
| <a></a>                 |
| <a attr="123">text</a>  |
| <a><b>X</b><b>Y</b></a> |
+-------------------------+

次の例は、数値の変換を使用する場合と無効にする場合の違いを示しています。この例では、変換が無効になっていない場合、関数は指数表記の数値を DOUBLE として解釈します。

SELECT PARSE_XML('<test>22257e111</test>'), PARSE_XML('<test>22257e111</test>', TRUE);
Copy
+-------------------------------------+-------------------------------------------+
| PARSE_XML('<TEST>22257E111</TEST>') | PARSE_XML('<TEST>22257E111</TEST>', TRUE) |
|-------------------------------------+-------------------------------------------|
| <test>2.225700000000000e+115</test> | <test>22257e111</test>                    |
+-------------------------------------+-------------------------------------------+

次の例は、関数の引数を名前で指定する方法を示しています。

SELECT PARSE_XML(STR => '<test>22257e111</test>', DISABLE_AUTO_CONVERT => TRUE);
Copy
+--------------------------------------------------------------------------+
| PARSE_XML(STR => '<TEST>22257E111</TEST>', DISABLE_AUTO_CONVERT => TRUE) |
|--------------------------------------------------------------------------|
| <test>22257e111</test>                                                   |
+--------------------------------------------------------------------------+