XML 関数は、XML データを操作するための機能を提供します。

JSONTOXML

この関数は、JSON から XML ドキュメントを返します。

Syntax

JSONTOXML(rootElementName, JSON)

rootElementNameは文字列、JSON は です。{clob, blob}戻り値はxmlです。

適切なUTFエンコーディング(8、16LE。16BE、32LE、322625BE)がJSONブロブとして検出されます。他のエンコーディングを使用する場合は、to_chars関数を参照してください。

結果は常に整形式のXML文書になります。

XMLへのマッピングは以下のルールを使用します:

  • 現在の要素名は最初はrootElementName、JSON構造が走査されるにつれてオブジェクト値名になります;
  • すべての要素名は、有効な XML 1.1 の名前でなければなりません。無効な名前はSQLXML仕様に従って完全にエスケープされます;
  • 各オブジェクトまたはプリミティブ値は、現在の名前を持つ要素で囲まれます;
  • 配列の値がルートでない限り、追加要素で囲まれることはありません;
  • NULL値は、属性xsi:nil="true"、空の要素で表現されます。

Example

JSONTOXML('person', x) のサンプル JSON から XML への変換

JSON

"firstName" : "John" , "children" : [ "Randy", "Judy" ]

XML

<?xml version="1.0" ?>
<person>
<firstName>John</firstName>
<children>Randy</children>
<children>Judy<children>
</person>


JSONToXml('person', x) のサンプル JSON から XML への変換 (ルート配列付き)

JSON

[{"firstName" : "George" }, { "firstName" : "Jerry" }]

XML

<?xml version="1.0" ?>
<person>
<person>
<firstName>George</firstName>
</person>
<person>
<firstName>Jerry</firstName>
</person>
</person>

この例では、XMLを整形式に保つために "person "ラッパー要素が追加されていることに注意してください。

XMLCOMMENT

この関数は XML コメントを返します。

Syntax

XMLCOMMENT(comment)
  • commentは文字列です;
  • 戻り値は XML です。

Example

SELECT XMLCOMMENT('Lorem ipsum ');;


この呼び出しは以下を返します:

<!-- Lorem ipsum -->

XMLCONCAT

この関数は、与えられた XML 要素を連結した XML を返します。

Syntax

XMLCONCAT(content [, content]*)
  • contentはxmlです;
  • 戻り値は xml です。

Example

SELECT XMLCONCAT(
XMLELEMENT("name", 'Dr Jekyll'),
XMLELEMENT("name", 'Mr Hyde')
);;

この呼び出しは以下を返します:

<name>Dr Jekyll</name><name>Mr Hyde</name>

値がNULLの場合は無視されます。すべての値がNULLの場合、NULLが返されます。

XMLELEMENT

この関数は、指定された名前と内容を持つ XML 要素を返します。

Syntax

XMLELEMENT([NAME] name [, <NSP>] [, <ATTR>][, content]*)
ATTR:=XMLATTRIBUTES (exp [AS name] [, exp [AS name]]*)
NSP:=XMLNAMESPACES ((uri AS prefix | DEFAULT uri | NO DEFAULT))+
  • contentの値がXML以外の型の場合、親要素に追加される際にエスケープされます;
  • NULLコンテンツ値は無視されます;
  • XML またはコンテンツの文字列値の空白は保持されますが、コンテンツ値の間に空白は追加されません;
  • XMLNAMESPACESは名前空間情報を提供するために使用されます;
  • NO DEFAULTは、デフォルトの名前空間を NULL uri - に定義することと同じです;xmlns=""
  • DEFAULTまたはNO DEFAULT名前空間項目は 1 つだけ指定できます;
  • 名前空間接頭辞xmlnsおよびxmlは予約済みです;
  • nameおよびprefix はIdentifiers です;
  • uriは文字列リテラルです;
  • contentはどんな型でも構いません;
  • 戻り値はXML で、 XML ドキュメント(要素コンテンツなど)が期待される場所での使用に有効です。

Example

SELECT
XMLELEMENT(NAME "MI6",
XMLNAMESPACES('uri' as ns1),
XMLELEMENT("head", 'M'),
XMLELEMENT("agent",
XMLATTRIBUTES('007' AS "id", 'Martini' AS "drink"),
'Bond, James'
)
);;

この呼び出しは以下を返します:

<MI6 xmlns:ns1="uri">
<head>M</head>
<agent id="007" drink="Martini">Bond, James</agent>
</MI6>

XMLESCAPENAME

この関数は、ISO 9075(有効なXML 識別子)に従った名前のエスケープに使用できます。

Syntax

XMLESCAPENAME(name, true)
  • Name は文字列です;
  • 2番目の引数は、完全なエスケープが必要なのか、部分的なエスケープが必要なのかを表します;
  • 戻り値はエスケープされた名前です。

Example

SELECT XMLESCAPENAME('xml_name_:XML_name_xls GetsEsc@ped', TRUE);;

この呼び出しは以下を返します:

_u0078_ml_name__u003A_XML_name_u005F_xls_u0020_GetsEsc_u0040_ped

XMLFOREST

この関数は、各コンテンツアイテムのXML 要素を連結して返します。

Syntax

XMLFOREST(content [<NSP>] [, AS name] [, content [AS name]]*)

NSP - XMLNAMESPACES の定義についてはXMLELEMENT を参照してください。

  • name はIdentifiers です;
  • content はどんな型でも構いません;
  • 戻り値は XML です;
  • コンテンツ項目に名前が与えられない場合、式は列参照でなければなりません。この場合、要素名はカラム名を部分的にエスケープしたものになります。

Example

SELECT XMLFOREST(
XMLNAMESPACES('http://tempuri.org/' AS ns1),
XMLELEMENT(family_name, 'Huxley') AS family,
XMLELEMENT(person, 'Aldous Huxley') AS familyMember
);;

この呼び出しは以下を返します:

<family xmlns:ns1="uri">
<family_name>Huxley</family_name>
</family>
<familyMember>
<person>Aldous Huxley</person>
</familyMember>

XMLPARSE

この関数は、文字列値表現の XML 型表現を返します。

Syntax

XMLPARSE((DOCUMENT|CONTENT) expr [WELLFORMED])
  • expr in {string, clob, blob};
  • 戻り値は xml です。

Examples

シンプルなXMLPARSE

SELECT XMLPARSE(CONTENT '
<chipmunk>Chip</chipmunk>
<chipmunk>Dale</chipmunk>
');;

この呼び出しは以下を返します:

<chipmunk>Chip</chipmunk>
<chipmunk>Dale</chipmunk>

XMLPARSE with DOCUMENT and WELLFORMED

SELECT XMLPARSE(DOCUMENT '
<ResqueRangers xmlns:ns1="uri">
<chipmunk>Chip</chipmunk>
<chipmunk>Dale</chipmunk>
</ResqueRangers>
' WELLFORMED);;

この呼び出しは以下を返します:

<ResqueRangers xmlns:ns1="uri">
<chipmunk>Chip</chipmunk>
<chipmunk>Dale</chipmunk>
</ResqueRangers>

XMLPARSEこの形式を使用する際には、2つの注意点があります:

  • DOCUMENTが指定された場合、式は単一のルート要素を持たなければならず、XML宣言を含んでも含まなくてもよい;
  • WELLFORMEDが指定された場合、バリデーションはスキップされます。これは、すでに有効であることが分かっているCLOBBLOBの型に対して特に有効です。

この関数は、ファイルを式として渡すためにも使用できます:

XMLPARSE(DOCUMENT f.file)

XMLPI

この関数は XML 処理命令を返します。

Syntax

XMLPI([NAME] name [, content])
  • nameは Identifiers です;
  • contentは文字列です
  • 戻り値はXMLです。

Example

SELECT XMLPI(NAME "Instruction", 'Push the red button');;

この呼び出しは以下を返します:

<?Instruction Push the red button?>

XMLQUERY

この関数は SQL/XML 2006 仕様の一部で、指定された XQuery を評価した XML 結果を返します。

Syntax

XMLQUERY([<NSP>] xquery [<PASSING>] [(NULL|EMPTY) ON EMPTY]])
PASSING:=PASSING exp [AS name] [, exp [AS name]]*
  • NSP - XMLNAMESPACESの定義についてはXMLELEMENTを参照してください;
  • xqueryは文字列です;
  • 戻り値は XML です。

Examples

シンプルな XMLQUERY

SELECT XMLQUERY(
'root/name/text()' PASSING CAST('
<root>
<name>John</name>
<name>Paul</name>
<name>George</name>
<name>Ringo</name>
</root>' AS xml)
);;

この呼び出しは以下を返します: 

John Paul George Ringo

INTO EMPTY句を含むXMLQUERY

ON EMPTY句は、評価されるシーケンスが空の場合の結果を指定するために使用されます。EMPTY ON EMPTYデフォルトでは、空の XML 結果を返し、 NULL ON EMPTYは NULL 結果を返します。

SELECT XMLQUERY(
'root/n/text()' PASSING CAST('
<root>
<name>John</name>
<name>Paul</name>
<name>George</name>
<name>Ringo</name>
</root>' AS xml)
NULL ON EMPTY);;

この呼び出しは以下を返します:

null

名前空間はXQueryのプロローグで直接宣言することもできます。 

オプションのPASSING Clauseは、名前と名前付きグローバル変数値を持たないコンテキスト項目を提供するために使用されます。XQuery がコンテキスト項目を使用し、コンテキスト項目が提供されていない場合は、例外が発生します。指定できるコンテキスト項目は1つだけで、XML型でなければなりません。コンテキストのない非XMLパッシング値はすべて、適切なXMLタイプに変換されます。

XQuery によっては、メモリをより効率的に使用するのに役立つドキュメント・プロジェクションが必要になる場合があります。詳細はXQuery Optimizationの章を参照してください。

XMLSERIALIZE

この関数は XML 式の文字型表現を返します。

Syntax

XMLSERIALIZE([(DOCUMENT|CONTENT)] xml [AS datatype])
  • 戻り値はデータ型と一致します;
  • データ型は文字型(string、varchar、clob)のみです;
  • contentがデフォルトです;
  • DOCUMENTが指定された場合、式は単一のルート要素を持たなければなりません;
  • XML が有効なドキュメントまたはフラグメントでない場合は、例外が発生します。

Example

SELECT XMLSERIALIZE(DOCUMENT '
<Wars-of-the-Roses xmlns:ns1="uri">
<House>Lancaster</House>
<House>York</House>
</Wars-of-the-Roses>'
AS CLOB);;

この呼び出しは以下を返します:

<Wars-of-the-Roses xmlns:ns1="uri"><House>Lancaster</House><House>York</House></Wars-of-the-Roses>

XSLTRANSFORM

この関数は、与えられたドキュメントに XSL スタイルシートを適用します。

Syntax

XSLTRANSFORM(doc, xsl)


  • doc , xsl in {string, clob, xml};
  • 戻り値は clob です。

Example

SELECT XSLTRANSFORM(
'<bookstore>
<book genre="novel" ISBN="1-861003-11-0">
<title>Pride And Prejudice</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>8.99</price>
</book>
</bookstore>',
'<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="book">
<book-data>
ISBN: <xsl:value-of select="@ISBN"/>
Title: <xsl:value-of select="title"/>
Author: <xsl:apply-templates select="author"/>
Price: <xsl:value-of select="price"/>
</book-data>
</xsl:template>
<xsl:template match="author">
<xsl:value-of select="first-name"/> <xsl:value-of select="first-last"/>
</xsl:template>
</xsl:stylesheet>'
);;

この呼び出しは以下を返します: 

<book-data>
ISBN: 1-861003-11-0
Title: Pride And Prejudice
Author: Jane
Price: 8.99
</book-data>

どちらかの引数がNULLの場合、結果はNULLになることに注意してください。

XPATHVALUE

この関数はドキュメントに XPATH 式を適用し、最初にマッチした結果の文字列値を返します。

Syntax

XPATHVALUE(doc, xpath)
  • docおよび の {string, clob, xml};xpath
  • 戻り値は文字列です。

非テキスト・ノードにMATCHしても、すべての子孫テキスト・ノードを含む文字列結果が得られることに注意してください。

Example

XML 値

<?xml version="1.0" ?>
<ns1:return xmlns:ns1="http://com.test.ws/exampleWebService">Hello<x> World</x></ns1:return>

FUNCTION  

SELECT XPATHVALUE(value, '/*[local-name()="return"])

この呼び出しの結果は 'Hello World' です。