Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

XMLELEMENT

1 つまたは複数の式の値を囲むように XML マークアップ・タグをフォーマットする関数。

Synopsis

XMLELEMENT([NAME] tag,expression[,expression])

XMLELEMENT([NAME] tag,XMLATTRIBUTES(expression [AS alias]),expression[,expression])

引数

NAME tag

XML マークアップ・タグの名前。NAME キーワードはオプションです。この引数には、NAME "tag""tag"、および NAME という 3 つの構文形式があります。最初の 2 つは機能的に同じです。指定する場合は、tag を二重引用符で囲む必要があります。tag の大文字/小文字の区別は保持されます。

XMLELEMENTtag の値の検証を実行しません。ただし、XML 規格では、有効な tag 名には文字 !"#$%&'()*+,/;<=>?@[\]^`{|}~ やスペース文字を含めないこと、および最初の文字に "-"、"."、または数字を使用しないことが定められています。

NAME キーワードを tag の値なしで指定すると、既定のタグの値、<Name> ... </Name> となります。

expression 任意の有効な式。普通は、タグ付けの対象となるデータ値を含む列の名前を指定します。列またはその他の式のコンマ区切りリストを指定できます。これらすべては同じ tag で囲まれます。最初のコンマ区切り要素を、XMLATTRIBUTES 関数にすることができます。XMLATTRIBUTES 要素は、1 つのみ指定できます。

概要

XMLELEMENT 関数は、tag で指定された XML (または HTML) マークアップ開始タグと終了タグを付けた expression の値を返します。例えば、XMLELEMENT(NAME "Para",Home_City) は、<Para>Chicago</Para> のような値を返します。XMLELEMENT を使用して空要素タグを生成することはできません。

XMLELEMENT は、テーブルまたはビューを参照する SELECT クエリまたは SELECT サブクエリで使用できます。XMLELEMENT は、一般のフィールド値と共に SELECT リストで使用できます。

tag 引数では、二重引用符を使用してリテラル文字列を囲みます。その他ほぼすべてのコンテキストにおいて、Caché SQL では一重引用符を使用してリテラル文字列を囲みます。二重引用符は 区切り識別子の指定に使用します。したがって、この機能を使用するには、区切り識別子を使用可能にする必要があります。

ダイナミック SQL%Prepare() メソッドのように、SQL コードを二重引用符で区切った文字列として指定する場合は、以下のように二重引用符を 2 つ指定して tag の二重引用符をエスケープする必要があります。

  SET myquery = "SELECT XMLELEMENT(""Para"",Name) FROM Sample.Person"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(myquery)

一般的に expression は、クエリで返される複数行の中のフィールド名 (または、フィールド名を 1 つ以上含む式) です。expression は、データ・ストリーム・フィールドを含む任意のタイプのフィールドにすることができます。指定された expression の値は、次の形式のように、開始タグと終了タグで囲んで返します。

<tag>value</tag>

タグを付ける値が空文字列 ('') または NULL の場合、次のように返します。

<tag></tag>

expression に複数のコンマ区切り要素が含まれる場合、次の形式のように、結果が連結されます。

<tag>value1value2</tag>

XMLELEMENT 関数は入れ子にして使用できます。XMLELEMENTXMLFOREST 関数は任意に組み合わせて入れ子にして使用できます。XMLELEMENT 関数は、XMLCONCAT を使用して連結できます。ただし、XMLELEMENT は、式全体の XML タイプの解析を実行しません。例えば、XMLELEMENTCASE 文の節内の文字変換を実行できません (以下の例を参照)。

XMLATTRIBUTES 関数

XMLATTRIBUTES 関数は、XMLELEMENT 関数内でのみ使用できます。expression の要素が XMLATTRIBUTES 関数の場合、次の形式で示すように、指定された式はタグの属性になります。

<tag ID='63' >value</tag>

XMLATTRIBUTES 関数は、XMLELEMENT 関数内で 1 つのみ指定できます。これは expression で任意の要素にできますが、慣例では最初の expression の要素とします。属性値は一重引用符で囲まれ、属性値とタグの閉じ山括弧 (>) との間に空白が挿入されます。

XMLELEMENT と XMLFOREST の比較

  • XMLELEMENT は、単一のタグ内に expression リストの値を連結します。XMLFOREST は、各 expression アイテムに個別のタグを割り当てます。

  • XMLELEMENT は、タグの値を指定する必要があります。XMLFOREST は、既定のタグの値を使用することも、個々のタグの値を指定することもできます。XMLELEMENT は、空の (名前のない) タグ : <>value</> を指定できませんが、XMLFOREST はできます。

  • XMLELEMENT は、XMLATTRIBUTES を使用してタグの属性を指定できます。XMLFOREST は、タグの属性を指定できません。

  • XMLELEMENT は、NULL のタグ文字列を返します。XMLFOREST は、NULL のタグ文字列を返しません。

句読点文字値

XML/HTML によってタグまたはその他のコーディングとして解釈される句読点文字がデータ値に含まれる場合、XMLELEMENTXMLFOREST はこの文字を対応するエンコード形式に変換します。

アンド記号 (&) は &amp; となります。

アポストロフィ (') は &apos; となります。

引用符 (") は &quot; となります。

左山括弧 (<) は &lt; となります。

右山括弧 (>) は &gt; となります。

入力文字列でアポストロフィを表すには、'can"t' のように、2 つのアポストロフィを指定します。列のデータには、アポストロフィを 2 つ付ける必要はありません。

次の例は、通常のデータおよび XML タグが付けられたデータとして、Sample.Person の各個人の Name フィールドの値を返します。

SELECT Name,
       XMLELEMENT("Para",Name) AS ExportName
     FROM Sample.Person

返されるデータ行は、次のようになります。

Name                    ExportName
Emerson,Molly N.   <Para>Emerson,Molly N.</Para>

次の例では、Sample.Person 内の重複していない Home_City 値と Home_State 値の組み合わせごとに、データに XML のタグ <Address> ... </Address> を付けて返します。市区町村名と都道府県名が連結されないようにするには、空白の expression を指定します。

SELECT DISTINCT 
   XMLELEMENT(NAME "Address",Home_City,' ',Home_State) AS CityState
   FROM Sample.Person
   ORDER BY Home_City

上の例では、オプションの NAME キーワードが使用されています。以下の例は、NAME キーワードを tag 値なしで使用します。

SELECT DISTINCT 
   XMLELEMENT(NAME,Home_City,' ',Home_State) AS CityState
   FROM Sample.Person
   ORDER BY Home_City

この場合、同じデータを返しますが、既定のタグ <Name> ... </Name> が付けられます。

以下の例では、文字ストリーム・フィールドを XML タグが付けられたデータとして返します。

SELECT Name,Notes,
       XMLELEMENT("Para",Notes)
     FROM Sample.Employee WHERE Notes IS NOT NULL

返されるデータ行は、次のようになります。

Emerson,Molly N. 5%Stream.GlobalCharacter^Sample.PersonS <Para>5%Stream.GlobalCharacter^Sample.PersonS</Para>

以下の例は、XMLELEMENT 関数を入れ子にして使用できることを示します。

SELECT XMLELEMENT("Para",Home_State,
                 XMLELEMENT("Emphasis",Name),Age)
FROM Sample.Person

返されるデータ行は、次のようになります。

<Para>CA<Emphasis>Emerson,Molly N.</Emphasis>24</Para>

以下の例は、XMLELEMENT が CASE 文の節内に値をタグ付けできないことを示します。

SELECT XMLELEMENT("Para",Home_State,
    XMLELEMENT("Para",Name),
    CASE WHEN Age < 21 THEN NULL
      ELSE XMLELEMENT("Para",Age) END )
FROM Sample.Person

返されるデータ行は、次のようになります。

<Para>CA<Para>Emerson,Molly N.</Para>&lt;Para&gt;24&lt;/Para&gt;</Para>

以下のクエリは、Sample.Person の Name フィールドの値を返します。これはデータに XML のタグ付けをし、このタグ内で ID フィールドをタグ属性として使用したものです。

SELECT XMLELEMENT("Para",XMLATTRIBUTES(ID),Name) AS ExportName
     FROM Sample.Person

返されるデータ行は、次のようになります。

ExportName
<Para ID='101' >Emerson,Molly N.</Para>

属性のエイリアスの指定方法を、以下の例に示します。

SELECT XMLELEMENT("Para",XMLATTRIBUTES(ID AS ItemKey),Name)
     FROM Sample.Person

返されるデータ行は、次のようになります。

<Para ItemKey='101' >Emerson,Molly N.</Para>

関連項目

XMLAGG 関数

XMLCONCAT 関数

XMLFOREST 関数

SELECT

FeedbackOpens in a new tab