6

XMLコードを含む文字列があり、PL/SQLの文字列から変数に値を抽出したいと思います。

XMLは非常に単純であり、これと同じです。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <SOAProxyResponse xmlns="http://tempuri.org/">
            <SOAProxyResult>
                There is 23142 Files!
            </SOAProxyResult>
        </SOAProxyResponse>
    </s:Body>
</s:Envelope

上記の例の「 23142ファイルがあります! 」という値を変数に取得するにはどうすればよいですか?

4

2 に答える 2

10

この関数を使用して、EXTRACTVALUEこの値を取得できます。この関数は、2つまたは3つのパラメーターを取ります。

  • XMLドキュメントを含むXMLTYPEオブジェクト。
  • XMLのどこに必要な値があるかを識別するXPath式。
  • (オプション)名前空間プレフィックスをURIにバインドする追加の文字列。

以下のクエリでは、上記で提示したXMLを文字列として取得し、そこからXMLTYPEオブジェクトを作成しました。次にEXTRACTVALUE、あなたが求めた値を取得するために使用します。

SELECT EXTRACTVALUE(XMLTYPE(
    '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Body>
            <SOAProxyResponse xmlns="http://tempuri.org/">
                <SOAProxyResult>
                    There is 23142 Files!
                </SOAProxyResult>
            </SOAProxyResponse>
        </s:Body>
    </s:Envelope>'), '//SOAProxyResult', 'xmlns="http://tempuri.org/"') AS result
  FROM dual;

XPath式は、ドキュメント内の//SOAProxyResultすべての要素を返すだけです。デフォルトの名前空間をにバインドするSOAProxyResult3番目の引数。XMLドキュメントの要素はこの名前空間内にあるため、これが必要です。EXTRACTVALUEhttp://tempuri.org/SOAProxyResult

このクエリを実行すると、次の出力が得られます。

結果
-------------------------------------------------- ------------------------------

                    23142個のファイルがあります!

ここから、このクエリの結果を変数に入れるのは簡単な変更になるはずです。

于 2011-02-16T18:20:31.307 に答える
1

しばらく前にOracleMagazineに良い記事がありました-それはあなたを助けるかもしれません:

http://www.oracle.com/oramag/oracle/01-jul/o41xml.html

ここで非常に一般的に使用するもう1つのものはXMLTypeAPIですが、もちろん、XMLデータをどのように保存/保持しているかによって異なります。

http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96616/arxml24.htm

于 2011-02-16T12:34:06.293 に答える