当我尝试解析XML文档时,我在XPath属性方面遇到了一些问题。 这是我的例子:
org.apache.thrift.server.TNonblockingServer$SelectAcceptThread.run() 456
我收到了NO_DATA_FOUND异常,因为我无法在此解析方法中找到结果。
我尝试了很多不同的策略,包括将 TTransportFactory tTransportFactory = new TFramedTransport.Factory();
TNonblockingServerTransport tNonblockingServerTransport = new TNonblockingServerSocket(7911);
PersistenceService.AsyncProcessor<?> processor = getAsyncProcessor(serviceName);
Factory protocolFactory = new TBinaryProtocol.Factory(true, true);
THsHaServer.Args serverArgs = new THsHaServer.Args(tNonblockingServerTransport);
serverArgs.processor(processor);
serverArgs.transportFactory(tTransportFactory);
serverArgs.protocolFactory(protocolFactory);
TNonblockingServer tNonblockingServer = new THsHaServer(serverArgs);
System.out.println("Starting persistence server on port 7911 ...");
tNonblockingServer.serve();
放在PATH或XQUery字符串中,但没有成功。
我认为这是一个小而简单的问题,但我无法找到。 提前致谢! 菲利普
答案 0 :(得分:1)
您在urn:
命名空间声明中缺少ns1
前缀。您也忽略了<return>
节点级别,并且您有一个默认命名空间,因为您有没有任何命名空间的子节点,这是不正确的。所以你需要:
SELECT Return.msgType
INTO lv_msgType
FROM XMLTABLE (
xmlnamespaces (
'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
'http://schemas.xmlsoap.org/soap/envelope/' AS "SOAP",
'urn:enterprise.com/ws/SAP/Finantial/MaintainMandate/V1' AS "ns1"),
'/soapenv:Envelope/SOAP:Body/ns1:maintainMandateResponse'
PASSING px_return
COLUMNS msgType VARCHAR2 (1) PATH 'return/messageType') Return;
获得:
PL/SQL procedure successfully completed.
Message type: E
或者您也可以将返回值移动到XPath中,这在此处具有相同的效果:
'/soapenv:Envelope/SOAP:Body/ns1:maintainMandateResponse/return'
PASSING px_return
COLUMNS msgType VARCHAR2 (1) PATH 'messageType') Return;