PLSQL читать значение из XML? - PullRequest
5 голосов
/ 16 февраля 2011

У меня есть строка с кодом 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 ]

9 голосов
/ 16 февраля 2011

Вы можете использовать функцию 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-документе находится в этом пространстве имен.

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

RESULT
--------------------------------------------------------------------------------

                    There is 23142 Files!

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

1 голос
/ 16 февраля 2011

В журнале 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...