Xquery преобразование текстовых данных в ответ - PullRequest
0 голосов
/ 17 мая 2018

Я хочу получить преобразование xquery для нижеприведенных данных ... здесь как часть ошибки ответа службы, я получаю ниже полезной нагрузки и мне нужно захватить данные в элементе ErrorCode.

Проблема, с которой я столкнулся здесь, заключается в том, что это не часть структуры XML, а то, что она входит в состав тегов CDATA.

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

Скажем, я получаю эту структуру как часть $ Fault, и теперь мне нужно назначить ErrorCode в новой переменной $ FaultCode

$ FaultCode = $ Fault / con: details / con1: ErrorResponseDetail / con1: detail / ********

Я не уверен, как я могу захватить этот дополнительный элемент детализации

<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
   <con:errorCode>382502</con:errorCode>
   <con:reason>eceived an error response</con:reason>
   <con:details>
      <con1:ErrorResponseDetail xmlns:con1="http://www.bea.com/wli/sb/stages/transform/config">
         <con1:detail>
         <![CDATA[<Error xmlns="http://servic.abcd.net/V1">
  <ErrorCode>DATA_AVAILABILITY</ErrorCode>
  <ErrorDescription>{"description":"No Cdata for )"}</ErrorDescription>
</Error>]]></con1:detail>
         <con1:http-response-code>404</con1:http-response-code>
      </con1:ErrorResponseDetail>
   </con:details>
   <con:location>
      <con:node>TestPPNode</con:node>
      <con:pipeline>TestPPNode_request</con:pipeline>
      <con:stage>Test Stage</con:stage>
      <con:path>request-pipeline</con:path>
   </con:location>
</con:fault>

1 Ответ

0 голосов
/ 17 мая 2018

Предполагая XQuery 3.1 с функцией parse-xml (https://www.w3.org/TR/xpath-functions/#func-parse-xml), вы можете использовать

declare namespace con="http://www.bea.com/wli/sb/context";
declare namespace con1="http://www.bea.com/wli/sb/stages/transform/config";
declare namespace V1 = "http://servic.abcd.net/V1";



/con:fault/con:details/con1:ErrorResponseDetail/con1:detail!parse-xml(.)/V1:Error/V1:ErrorCode/data()

, чтобы получить строковое значение DATA_AVAILABILITY, см. https://xqueryfiddle.liberty -развитие.net / 6qM2e27 для демонстрации.

В XQuery 1 нет синтаксического анализа XML, который необходим для правильного решения этой проблемы, но вы, конечно, можете попробовать использовать строковые функции для извлечения данных, например

/con:fault/con:details/con1:ErrorResponseDetail/con1:detail/substring-before(substring-after(., '&lt;ErrorCode>'), '&lt;/ErrorCode>')
...