2015-05-17 1 views
1

Я пытаюсь извлечь значения из данных XML, хранящихся в столбце NCLOB в таблице Oracle db.Извлечение XML-данных из NCLOB из XML с атрибутами в Oracle db

Структура XML

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns="http://example.com/FAS/DOC/2011/v3.0b" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <record xmlns="http://example.com/FAS/DOC/2011/v3.0b"> 
    <pdate xmlns="http://example.com/FAS/DOC/2011/v3.0b">2014-05-15</pdate> 
    </record> 
</root> 

Запрос

select EXTRACTVALUE(XMLTYPE(nclob_column),'/root/record/pdate','xmlns="http://example.com/FAS/DOC/2011/v3.0b"') pdate1, 
     EXTRACTVALUE(XMLTYPE(nclob_column),'/root/record/pdate') pdate2 
from nclob_table 

Проблема

The pdate1 действительно возвращает значение, но pdate2 возврат null. I не может использовать третий параметр EXTRACTVALUE(), чтобы указать значение атрибута xmlns , которое изменяется на каждой строке/записи. Поэтому я получаю значение для одной строки, но null для всех остальных.

Как извлечь значение без указания атрибута?

Спасибо.

ответ

0

Если вы можете гарантировать, что пространство имен не имеет значения для выбора элемента в этом случае, вы можете использовать local-name(), чтобы соответствовать элементу только это локальное имя, не обращая внимания на пространство имен:

select EXTRACTVALUE(
      XMLTYPE(nclob_column), 
      '/*[local-name()="root"]/*[local-name()="record"]/*[local-name()="pdate"]' 
     ) pdate 
from nclob_table 

SQL Fiddle

+0

Спасибо! Это сработало! – datalearner

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