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_pedXMLFOREST
この関数は、各コンテンツアイテムの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])exprin {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が指定された場合、バリデーションはスキップされます。これは、すでに有効であることが分かっているCLOBやBLOBの型に対して特に有効です。
この関数は、ファイルを式として渡すためにも使用できます:
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 RingoINTO 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,xslin {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' です。