2016-03-18 19 views
0

Bir web servis çağrısından geri gelen XML değerleri ayıklamak çalışıyorum. Ancak, "xmlns" özniteliğinin dahil edilmesi, sorgumun beklendiği gibi çalışmayacak olmasına neden oluyor.SQL kullanarak XML kullanarak bir değer ayıklamak Oracle 11g

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

aynı sorgu ancak kök etiketi "dizesi" dir xmlns özniteliği içerir:

Bu sorgu beklendiği gibi, geri "Y" olsun çalışır. Gerçek XML bu şekilde geri döner. Ben daraltdım, bana sorun veren özelliktir. Bu null döndürür:

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; 

Neden xmlns dahil SAMP_OVERALL etiketinin değerini döndürmek için değil buna sebep öznitelik geliyor?

Bu noktada ihtiyacım olan değerleri çıkarmak için sözdizimini anlayamıyorum.

Teşekkürler!

cevap

1

Dene: Bu cevap, bir öneki olmadan varsayılan ad alanı tanımlandığında xpath kullanarak değerleri ayıklamak açıklar

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; 

:
Getting elements with default namespace (no namespace prefix) using XPath

+0

amele büyük! link için de teşekkür ederim. – mjf200