2016-03-18 15 views
0

Webサービス呼び出しから戻ってくるXMLから値を抽出しようとしています。ただし、 "xmlns"属性を含めると、クエリが期待どおりに機能しなくなります。予想通りOracle 11gを使用してSQLを使用してXMLから値を抽出

このクエリは動作しますが、私は戻って「Y」を得る:ここで

SELECT EXTRACTVALUE(XMLType('<?xml version="1.0" encoding="utf-8"?><string><SAMP_OVERALL>Y</SAMP_OVERALL></string>') 
, 
'/string/SAMP_OVERALL') myval 
from dual; 

は同じクエリですが、ルートタグ「string」はのxmlns属性が含まれています。これが実際のXMLがどのように戻ってくるかです。私はそれが私に困っている属性であることを絞り込んだ。それはnullを返します:

SELECT EXTRACTVALUE(XMLType('<?xml version="1.0" encoding="utf-8"?><string xmlns="someweburl"><SAMP_OVERALL>Y</SAMP_OVERALL></string>') 
, 
'/string/SAMP_OVERALL') myval 
from dual; 

はなぜのxmlnsを含めることはSAMP_OVERALLタグの値を返すことはない、これを原因と属性のでしょうか?

この時点で、私は必要な値を引き出すための構文を理解できません。

ありがとうございます!

答えて

1

試してみてください。

SELECT 
    EXTRACTVALUE(XMLType(
    q'[<?xml version="1.0" encoding="utf-8" ?> 
     <string xmlns="http://someweburl"><SAMP_OVERALL>Y</SAMP_OVERALL></string>]') 
, 
'/*[local-name()="string"]/*[local-name()="SAMP_OVERALL"]') myval 
from dual; 

この答えは、接頭辞なしのデフォルトの名前空間が定義されている時にXPathを使用して値を抽出する方法について説明します。
Getting elements with default namespace (no namespace prefix) using XPath

+0

は素晴らしい仕事を!リンクもありがとうございます。 – mjf200

関連する問題