Сбой XPath для XML с пространством имен через SQL EXTRACTVALUE? - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь проанализировать FaultMessage из XML-ответа, используя EXTRACTVALUE.Ниже мой код SQL:

SELECT EXTRACTVALUE( XMLTYPE('
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <s:Fault>
      <faultcode>s:Client</faultcode>
      <faultstring xml:lang="tr-TR">İstek şeması doğrulanamadı. Lütfen tüm bilgileri kontrol edin.</faultstring>
      <detail>
        <Fault xmlns="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
          <FaultCode>Schema_Customer_005|1e8c66-c333-4357-9c7d-3f4fcd553</FaultCode>
          <FaulCategory>Schema</FaulCategory>
          <FaultMessage> Customer name can not be blank, can not contain spaces, or any special characters. LASTNAMEFIRSTNAME is the required format. </FaultMessage>
          <FaultDetailedMessage>UMUT DEMIRCI</FaultDetailedMessage>
        </Fault>
      </detail>
    </s:Fault>
  </s:Body>
</s:Envelope>'),    
    '/s:Envelope/s:Body/s:Fault/detail/*:Fault/FaultMessage',
    'xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" ') a
FROM DUAL

Пожалуйста, предложите, как я могу получить FaultMessage.

1 Ответ

2 голосов
/ 25 апреля 2019

Дано:

  1. Более глубокий Fault элемент и его потомки находятся в пространстве имен http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract.
  2. Похоже, вы уже определили префикс a пространства имен для http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract
  3. Для использования * в качестве подстановочного знака для префикса пространства имен требуется XPath 2.0 +.

Измените

/s:Envelope/s:Body/s:Fault/detail/*:Fault/FaultMessage

на

/s:Envelope/s:Body/s:Fault/detail/a:Fault/a:FaultMessage

, чтобы ваш XPath был верным и не требовал XPath 2.0+ процессор.

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