PLSQL читать значение из XML?

У меня есть строка с кодом XML, я хочу извлечь значение из нее в PL/SQL в переменную.

XML очень прост и не будет отличаться от этого:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <SOAProxyResponse xmlns="http://tempuri.org/">
            <SOAProxyResult>
                There is 23142 Files!
            </SOAProxyResult>
        </SOAProxyResponse>
    </s:Body>
</s:Envelope

Как я могу получить значение "Есть 23142 файла!" В примере выше в переменную?

2 ответа

Решение

Вы можете использовать EXTRACTVALUE Функция для получения этого значения. Эта функция принимает два или три параметра:

  • объект XMLTYPE, который содержит документ XML.
  • выражение XPath, которое определяет, где в XML находится значение, которое мы хотим.
  • (необязательно) дополнительная строка, которая связывает префиксы пространства имен с URI.

В приведенном ниже запросе я взял XML, который вы представили выше, в виде строки и создал из него объект XMLTYPE. Я тогда использую EXTRACTVALUE чтобы получить значение, которое вы просили:

SELECT EXTRACTVALUE(XMLTYPE(
    '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Body>
            <SOAProxyResponse xmlns="http://tempuri.org/">
                <SOAProxyResult>
                    There is 23142 Files!
                </SOAProxyResult>
            </SOAProxyResponse>
        </s:Body>
    </s:Envelope>'), '//SOAProxyResult', 'xmlns="http://tempuri.org/"') AS result
  FROM dual;

Выражение XPath //SOAProxyResult просто возвращает все SOAProxyResult элементы в документе. Третий аргумент EXTRACTVALUE привязывает пространство имен по умолчанию к http://tempuri.org/, Это необходимо, потому что SOAProxyResult элемент в вашем XML-документе находится в этом пространстве имен.

Если я выполню этот запрос, я получу следующий вывод:

РЕЗУЛЬТАТ
-------------------------------------------------- ------------------------------

                    Есть 23142 Файлов!

Отсюда следует надеяться, что это будет тривиальная модификация, чтобы поместить результат этого запроса в переменную.

Недавно в журнале Oracle была хорошая статья, которая может помочь вам:

http://www.oracle.com/oramag/oracle/01-jul/o41xml.html

Еще одна вещь, которую мы используем здесь довольно часто, - это API XMLType, но, конечно, это зависит от того, как вы храните / храните ваши данные XML:

http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96616/arxml24.htm

Другие вопросы по тегам