我想要为下面的数据起草一个xquery转换。在这里,作为服务响应错误的一部分,我将获得低于有效负载的数据,并需要捕获ErrorCode元素中的数据。
我在这里遇到的挑战是,这不是XML结构的一部分,而是CDATA标记的一部分。
你能给我建议一下如何在变量中得到这个值吗?
假设我将这个结构作为$Fault的一部分,现在需要在一个新变量$FaultCode中分配ErrorCode
$Fault/con:details/con1:ErrorResponseDetail/con1:detail/ * $FaultCode =$FaultCode*
我不知道如何捕捉到这个更详细的元素。
<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>发布于 2018-05-17 11:46:53
假设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(., '<ErrorCode>'), '</ErrorCode>')https://stackoverflow.com/questions/50390505
复制相似问题