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