2011-01-13 41 views
1

私はoracleに興味深い状況があります。OracleでXMLを構文解析する

m.M_DC.extract('/qualifieddc/dc:subject/text()', 'xmlns:dc="http://purl.org/dc/elements/1.1/"').getStringVal() "INFO", 

得られた情報エリアは「info1info2info3」次のようになります。私は、次を使用し、

<dc:subject>info1</dc:subject> <dc:subject>info2</dc:subject><dc:subject>info3</dc:subject> 

と私は、このフィールドを照会しています:次のように私たちは、分野や一部のXML文字列を格納します。

「info1、info2、info3」としてこの情報領域を作成するためのoracle関数はありますか?

任意の助けが...

おかげでいただければ幸いです...

答えて

2

XMLは悪夢です。推奨されていない私は、連結のためのwmsys.wm_concatを使用してい

> select wmsys.wm_concat(''||column_value) text 
    2 from 
    3 xmltable(
    4  XMLNAMESPACES('http://purl.org/dc/elements/1.1/' as "dc"), 
    5  '$xml/qualifieddc/dc:subject/text()' 
    6  passing xmltype('<qualifieddc xmlns:dc="http://purl.org/dc/elements/1.1/ 
">' || 
    7    '<dc:subject>info1</dc:subject> <dc:subject>info2</dc:subject>< 
dc:subject>info3</dc:subject>' || 
    8   '</qualifieddc>') as "xml"); 

TEXT 
-------------------------------------------------------------------------------- 

info1,info2,info3 

注:あなたは、この(救助にXMLTABLE)のような何かを試すことができます。他のstragg実装を使用します。

-1

このコードはあなたに役立ちます。

DECLARE XのXMLType:= XMLTypeの( ' INFO1
INFO2情報3')。 のR IN( SELECT EXTRACTVALUEテーブルから名前 (XMLSequenceに(抽出物(X、 '/ DC')))P として(値(P)、 '/ DC /テキスト()'))LOOP FOR をBEGIN

END LOOP; END;

コードはplsqlデベロッパーでテストされています。

0

Samuelのコメントですでに指摘されているように、OracleでのXML処理は悪夢です。特に大量のXMLデータをロードしている場合業界標準の多くの場合のように、XMLやXSDが非常に複雑な場合は悪化します。私の意見では、XMLを前処理してOracleの表として格納するのが最善の方法です。次に、XQueryやXPathなどの難解なクエリ言語を習得する必要はありません。 ODIなどのETLツールを使用すると、これを実現できます。また、専用のエンタープライズXMLパーサーがあり、コードを書くことなくload XML to Oracleを書くことができます

関連する問題