2016-03-18 2 views
0

Я пытаюсь извлечь значения из XML, возвращающегося из вызова веб-службы. Однако включение атрибута «xmlns» приводит к тому, что мой запрос не работает должным образом.извлечение значения из XML с использованием SQL с использованием Oracle 11g

Этот запрос работает, как и ожидалось, я получаю «Y» назад:

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

Вот тот же запрос, но корневой тег «строка» содержит атрибут XMLNS. Так возвращается фактический XML. Я сузился, это атрибут, дающий мне неприятности. Она возвращает нуль:

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

Try:

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

Смежные вопросы