Java 使用xpath从soap服务获取响应(错误:前缀必须解析为名称空间:soap)
我正在使用ApacheCamel使用soap服务。我收到以下答复:Java 使用xpath从soap服务获取响应(错误:前缀必须解析为名称空间:soap),java,xpath,soap,apache-camel,Java,Xpath,Soap,Apache Camel,我正在使用ApacheCamel使用soap服务。我收到以下答复: INFO 17:49:59.662 - <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:consultaCEPResponse xmlns:ns2="http://cliente.bean.master.sigep.bsb.cor
INFO 17:49:59.662 -
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:consultaCEPResponse xmlns:ns2="http://cliente.bean.master.sigep.bsb.correios.com.br/">
<return>
<bairro>zzzzzz</bairro>
<cep>000000</cep>
<cidade>tttttt</cidade>
<complemento2>yyyyy</complemento2>
<end>xxxxxxxx</end>
<uf>wwwww</uf>
</return>
</ns2:consultaCEPResponse>
</soap:Body>
</soap:Envelope>
}您可能应该在XPath表达式中添加缺少的名称空间声明。比如:
transform().xpath("/soap:Envelope/soap:Body/ns2:consultaCEPResponse/return//text()",
new Namespaces("soap", "http://schemas.xmlsoap.org/soap/envelope/")
.add("ns2", "http://cliente.bean.master.sigep.bsb.correios.com.br/"))
如果这不起作用,一种方法也可以是:
transform().xpath("//*[local-name()='return']//text()")
注意:我已经在XPath表达式(
//text()
)中添加了一个//code>,因为没有直接从返回元素派生的文本,但现在它将所有内容打印在同一行上:Jardim das Acácias0407900são PauloAvenida Roque Petroni Júnior 1089SP而不是:Jardim das Acácias0407900súo PauloAvenida Roque Petroni Júnior 1089SP如果将XPath表达式中的//text()
替换为/*
,会发生什么?
transform().xpath("//*[local-name()='return']//text()")