【问题标题】:What is the correct way to extract de value from this XML in Oracle?在 Oracle 中从这个 XML 中提取价值的正确方法是什么?
【发布时间】:2019-09-24 07:15:49
【问题描述】:

我试图从 Oracle 中的 XML 节点中提取文本值。我不太确定该怎么做,我也不完全理解 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>'

我希望使用 select 提取“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

【问题讨论】:

标签: xml oracle xpath


【解决方案1】:

看起来问题出在标签“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”,然后提取值..

这可能不是完美的方法.. 但它会起作用.. ;)

【讨论】:

  • 谢谢,但如果您尝试获取故障字符串,但我无法使其与“ErrorMessage”子节点一起使用(内部详细信息)
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多