ではなく名前空間を削除するには、XML文字列を変更しようとしているを取得するには、それを削除する必要があり、あなたは組み込むことができますそれをXMLクエリに追加します。あなたは、単一のノードを期待しているように、とエラーになります -
FUNCTION XMLTEST (P_XML VARCHAR2) RETURN VARCHAR2 AS
V_FLAG VARCHAR2(30);
BEGIN
SELECT P.boolean
INTO V_FLAG
FROM xmltable(xmlnamespaces(default 'http://SOAPwebservice.com/WebServices/Methods'),
'/boolean' passing xmltype(P_XML)
columns boolean VARCHAR2(30) PATH '.') P;
RETURN V_FLAG;
END XMLTEST;
または:OldProgrammerはすでに非推奨extractValue()
機能ではなく、あなたがについて尋ねたのXMLTableで同じことを行うことができますことを行う方法を示しました。 XMLTableのバージョンからの倍数はとにかくがある場合 - のXMLQuery:
SELECT XMLQuery(
'declare default element namespace "http://SOAPwebservice.com/WebServices/Methods"; (: :)
/boolean/text()'
passing xmltype(P_XML)
returning content).getStringVal()
INTO V_FLAG
FROM dual;
Read more about XMLTable and XMLQuery、およびそれらがどのように名前空間を扱います。
それは、XPathワイルドカードすることも可能です:抽出された値は、単なる文字列'false'
以上のものです、あなたのフォーマットされたXML文字列で
SELECT XMLQuery('/*:boolean/text()'
passing xmltype(P_XML)
returning content).getStringVal()
INTO V_FLAG
FROM dual;
を - それは、スペースや改行文字を先頭と末尾た、そしてどのあなたは可能性ストリップ必要ならば外に出す。あなたの実際のXMLが余分な空白を持たない<boolean>false</boolean>
を持っているなら、それはもちろん必要ではなく、あなたのv_flag
は5文字でなければなりません。
PL/SQLでこれを行う必要はありませんが、それはあなたが課している要件のようです。
?あなたは、要素名の値を抽出するSQLクエリを希望? –
OldProgrammer
はい@OldProgrammer、webservice reponseはbooleanタグです。何か案が? –