処理手順を含む XML コンテンツの解析
次の例では、 PARSE_XML 関数を使用して、処理手順に疑問符が含まれる XML コンテンツを解析しています。
SELECT PARSE_XML('<?PITarget PIContent ??><mytag />') AS mytag;
- 変更前に返されたもの::
100100 (22P02): Error parsing XML: prematurely terminated XML document in processing instructions, pos 33
- 変更後に返されるもの::
+-----------------+
| MYTAG |
|-----------------|
| <mytag></mytag> |
+-----------------+
角括弧またはアポストロフィを含む XML コンテンツの解析
次の例では、 PARSE_XML 関数を使用して、 XML 属性値に角括弧とアポストロフィが含まれる XML コンテンツを解析しています。変更後、 XML 属性値のアポストロフィや角括弧は、戻り値や生成される XML で適切にエスケープされます。
SELECT PARSE_XML('<mytag myattr="<>\'"/>') AS mytag;
- 変更前に返されたもの::
+------------------------------+
| MYTAG |
|------------------------------|
| <mytag myattr="<>'"></mytag> |
+------------------------------+
- 変更後に返されるもの::
+-----------------------------------------+
| MYTAG |
|-----------------------------------------|
| <mytag myattr="<>'"></mytag> |
+-----------------------------------------+
ユーザー定義のエンティティを含む XML コンテンツの解析
次の例では、 PARSE_XML 関数を使用して、ユーザー定義エンティティを含む XML コンテンツを解析します。
SELECT PARSE_XML('<!DOCTYPE doc [<!ENTITY placeholder "some text">]><doc>&placeholder;</doc>')
AS placeholder;
- 変更前に返されたもの::
100100 (22P02): Error parsing XML: unknown entity &placeholder;, pos 68
- 変更後に返されるもの::
+-------------------------------------------------------------+
| PLACEHOLDER |
|-------------------------------------------------------------|
| <!DOCTYPE doc [<!ENTITY placeholder "some |
| text">]><doc>some text</doc> |
+-------------------------------------------------------------+
空白を保持する XML コンテンツの解析
この変更は、Snowflakeの動作が、空白の保持に関する XML 仕様 と一致するように行われました。
次の例では、 PARSE_XML 関数を使用して XML コンテンツを解析し、 xsl:space="preserve" 属性を指定しています。
SELECT PARSE_XML('<mytag xsl:space="preserve"> my content </mytag>')
AS space_preserve;
- 変更前に返されたもの::
+--------------------------------------------------+
| SPACE_PRESERVE |
|--------------------------------------------------|
| <mytag xsl:space="preserve"> my content </mytag> |
+--------------------------------------------------+
- 変更後に返されるもの::
+--------------------------------------------------+
| SPACE_PRESERVE |
|--------------------------------------------------|
| <mytag xsl:space="preserve">my content</mytag> |
+--------------------------------------------------+
次の例では、 PARSE_XML 関数を使用して XML コンテンツを解析し、 xml:space="preserve" 属性を指定しています。
SELECT PARSE_XML('<mytag xml:space="preserve"> my content </mytag>')
AS space_preserve;
- 変更前に返されたもの::
+--------------------------------------------------+
| SPACE_PRESERVE |
|--------------------------------------------------|
| <mytag xml:space="preserve">my content</mytag> |
+--------------------------------------------------+
- 変更後に返されるもの::
+--------------------------------------------------+
| SPACE_PRESERVE |
|--------------------------------------------------|
| <mytag xml:space="preserve"> my content </mytag> |
+--------------------------------------------------+
XML 空白を保持するコンテンツのロード
以下の例では、 COPY INTO <table> コマンドを使用して、データのロードを行っています。PRESERVE_SPACE パラメーターは、空白を保持するために TRUE に設定されます。
COPY INTO mytable
FROM @my_xml_stage
FILE_FORMAT = (TYPE = 'XML' PRESERVE_SPACE = TRUE);
- 変更前にコンテンツがロードされました。:
+--------------------------------------------------+
| SPACE_PRESERVE |
|--------------------------------------------------|
| <mytag xsl:space="preserve"> my content </mytag> |
+--------------------------------------------------+
- 変更後にコンテンツがロードされました。:
+--------------------------------------------------+
| SPACE_PRESERVE |
|--------------------------------------------------|
| <mytag xml:space="preserve"> my content </mytag> |
+--------------------------------------------------+
変更の前後で、コンテンツは空白を保持しますが、属性は xsl:space="preserve" から xml:space="preserve" に変更されます。
参照: 1862