Как правильно извлечь значение de из этого XML в Oracle? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь извлечь значение de text из узла XML в Oracle.Я не совсем уверен, как это сделать, и я не совсем понимаю документацию Oracle, так как кажется, что есть много способов сделать это.Как бы вы извлекли де-узел "ErrorMessage" из этого узла?

Спасибо

'<soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <faultcode>soap:Client</faultcode>
          <faultstring>No existe la referencia del codigo de Hospital Publico.</faultstring>
          <detail>
              <Error xmlns="SSoapException">
                <ErrorNumber>REF17</ErrorNumber>
                <ErrorMessage>No existe la referencia del codigo de Hospital Publico.</ErrorMessage>
              </Error>
           </detail>
    </soap:Fault>'

Я ожидаю извлечь узел «ErrorMessage» с помощью выбора.

Я пытался это, но не работает

SELECT
	xmltype('
	<soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <faultcode>soap:Client</faultcode>
          <faultstring>No existe la referencia del codigo de Hospital Publico.</faultstring>
          <detail>
              <Error xmlns="SSoapException">
                <ErrorNumber>REF17</ErrorNumber>
                <ErrorMessage>No existe la referencia del codigo de Hospital Publico.</ErrorMessage>
              </Error>
           </detail>
    </soap:Fault>').extract('soap:Fault"/faultstring/text()').getstringval()
	FROM dual

Ответы [ 2 ]

0 голосов
/ 08 мая 2019
SELECT
  xmltype('
  <soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <faultcode>soap:Client</faultcode>
          <faultstring>No existe la referencia del codigo de Hospital Publico.</faultstring>
          <detail>
              <Error xmlns="SSoapException">
                <ErrorNumber>REF17</ErrorNumber>
                <ErrorMessage>No existe la referencia del codigo de Hospital Publico.</ErrorMessage>
              </Error>
           </detail>
    </soap:Fault>').extract('//*:Fault/faultstring/text()').getstringval()
  FROM dual
0 голосов
/ 06 мая 2019

Похоже, что проблема связана с тегом "soap: Fault" .. система не смогла распознать тег.

Поскольку с этим конкретным кодом вы можете получить результат ..

SELECT xmltype('
<soap xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <faultcode>soap:Client</faultcode>
          <faultstring>No existe la referencia del codigo de Hospital Publico.</faultstring>
          <detail>
              <Error xmlns="SSoapException">
                <ErrorNumber>REF17</ErrorNumber>
                <ErrorMessage>No existe la referencia del codigo de Hospital Publico.</ErrorMessage>
              </Error>
           </detail>
    </soap>
    ').extract('soap/faultstring/text()').getstringval()
  FROM dual;

результат равен

No existe la referencia del codigo de Hospital Publico.

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

SELECT xmltype(replace('
<soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <faultcode>soap:Client</faultcode>
          <faultstring>No existe la referencia del codigo de Hospital Publico.</faultstring>
          <detail>
              <Error xmlns="SSoapException">
                <ErrorNumber>REF17</ErrorNumber>
                <ErrorMessage>No existe la referencia del codigo de Hospital Publico.</ErrorMessage>
              </Error>
           </detail>
    </soap:Fault>
    ','soap:Fault','new_tag')).extract('new_tag/faultstring/text()').getstringval()
  FROM dual;

и результат будет

No existe la referencia del codigo de Hospital Publico.

Здесь я заменяю тег «soap: Fault» новым тегом, а затем извлекаю значение ..

Возможно, это не идеальный подход ... но он будет работать ..;)

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