响应中的文本数据的Xquery转换

时间:2018-05-17 11:37:59

标签: xslt-1.0 xquery

我想得到针对以下数据起草的xquery转换..这里作为服务响应错误的一部分,我得到了低于有效负载并且需要捕获ErrorCode元素中的数据。

我在这里遇到的挑战是,这不是XML结构的一部分,它是CDATA标签的一部分。

请您建议我如何在变量中得到这个值。

假设我将此结构作为$ Fault的一部分,现在需要在新变量$ FaultCode中分配ErrorCode

$ 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 :(得分:1)

假设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-development.net/6qM2e27了解演示。

使用XQuery 1,没有正确解决此问题的XML解析,但您当然可以尝试使用字符串函数来提取数据,例如。

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