説明
この関数は、XPath式がXML内でマッチする1つまたは複数のノードを削除します。
構文
DELETEXML( XMLType_instance, XPath_string [, namespace_string ])
パラメータの説明
| フィールド | 説明 |
|---|---|
| XMLType_instance | ターゲットXMLドキュメントを表すXMLTypeインスタンスを指定します。 |
| XPath_string | 削除する1つまたは複数のノードを示すXPath式を指定します。絶対パス(スラッシュで始まる)または相対パス(先頭のスラッシュを省略)を使用できます。先頭のスラッシュを省略した場合、相対パスのコンテキストはデフォルトでルートノードになります。XPath_stringで指定されたノードのすべての子ノードも削除されます。 |
| namespace_string | オプション。XPath_stringにネームスペース情報を提供するために使用します。 |
戻り値のタイプ
XMLTypeデータ型を返します。
例
DELETEXML関数を使用して、ターゲットXMLから一致するノードを削除します。ここで、ターゲットXMLは<bookstore>ノードとその子ノードです。指定されたXPath式は/bookstore/authorであり、これは<bookstore>ノードの下にある<author>ノードを削除するよう指示します。クエリの結果はASキーワードを使用してresultに名前を変更します。最後に、dualテーブルから結果を取得します。SELECT DELETEXML( XMLtype('<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>'), '/bookstore/author' ) AS result FROM dual;実行結果は次のとおりです:
+-----------------------------------------------+ | RESULT | +-----------------------------------------------+ | <bookstore> <book att="old"/> </bookstore> | +-----------------------------------------------+ 1 row in set親ノードのすべての子ノードを削除した後も、親ノードのネームスペースは保持されます。
SELECT DELETEXML( xmltype( '<a xmlns="ns1" xmlns:f="ns2"> <f:b b1="b1" b2="b2">bbb1</f:b> <b b1="b1" b2="b2">bbb2</b> </a>' ), '/a/*', 'xmlns="ns1"' ) FROM dual;実行結果は次のとおりです:
+----------------------------------------------------------------------------------------------------------------------------------+ | DELETEXML(XMLTYPE('<AXMLNS="NS1"XMLNS:F="NS2"><F:BB1="B1"B2="B2">BBB1</F:B><BB1="B1"B2="B2">BBB2</B></A>'),'/A/*','XMLNS="NS1"') | +----------------------------------------------------------------------------------------------------------------------------------+ | <a xmlns="ns1" xmlns:f="ns2"/> | +----------------------------------------------------------------------------------------------------------------------------------+ 1 row in set