Парсинг XML в oracle SQL

Рейтинг: 2Ответов: 1Опубликовано: 13.04.2015

Добрый день!

Есть BLOB содержащий примерно такие данные:

<Data>
  <Name>Data1</Name>
  <Value>Data1_1</Value>
</Data>
<Data>
  <Name>Data2</Name>
  <Value>Data2_2</Value>
</Data>

Задача вытащить только Data2_2 при помощи extractvalue() ориентируясь на Data2. Как? Через xmlsequence() не получилось. Пожалуйста, подскажите, куда копать, желательно с примером :)

Спасибо!

Ответы

▲ 3Принят

Если в BLOB хранится xml и в нем есть корневой элемент (я подставил root), то можешь использовать такой подход

WITH tmp AS
  (
    SELECT
      '<Root>
        <Data>
          <Name>Data1</Name>
          <Value>Data1_1</Value>
        </Data>
        <Data>
          <Name>Data2</Name>
          <Value>Data2_2</Value>
        </Data>
      </Root>' x
    FROM
      dual
  )

SELECT
  extractvalue(VALUE(b),'Data/Name') name,
  extractvalue(VALUE(b),'Data/Value') value
FROM
  tmp,
  TABLE(xmlsequence(extract(XMLTYPE(tmp.x),'Root/Data'))) b
WHERE
  extractvalue(VALUE(b),'Data/Name') = 'Data2'