我必须迭代数据库结果。
我使用 dss 从数据库中获取数据。现在结果以 xml 格式出现。但我的流程没有进入迭代中介器。从输出中删除 xml 标签后,我尝试使用 xpath 在线工具来形成表达式。
真的需要从输出中删除标签
<?xml version='1.0' encoding='UTF-8'?>
吗?
如果有,如何删除?
我正在使用 WSO2 MI 4.1.0
下面是我的数据库调用的示例输出,
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<Entries xmlns="TotscoDS">
<statusCodePresent>429
</statusCodePresent>
<statusCodePresent>429
</statusCodePresent>
<statusCodePresent>429
</statusCodePresent>
<statusCodePresent>429
</statusCodePresent>
<statusCodePresent>429
</statusCodePresent>
</Entries>
</soapenv:Body>
</soapenv:Envelope>
<payloadFactory media-type="xml">
<format>
<getStates>
<msID>$1</msID>
</getStates>
</format>
<args>
<arg evaluator="xml" expression="$ctx:MI_ID"/>
</args>
</payloadFactory>
<property name="messageType" scope="axis2" type="STRING" value="text/xml"/>
<header name="Action" scope="default" value="retrieveStateDetails"/>
<call>
<endpoint key="TotscoEP" />
</call>
<log level="full" />
<iterate expression="//Entries" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<target>
<sequence>
<property expression="//statusCodePresent/text()" name="statusCodePresent" scope="default" type="STRING"/>
<log level="custom">
<property expression="fn:concat($ctx:HUBMessageID,' : StatusCode = ',$ctx:statusCodePresent)" name="Message"/>
</log>
<filter regex="false" source="boolean(get-property('statusCodePresent'))">
<then>
<log level="custom">
<property expression="fn:concat($ctx:HUBMessageID,' : No Status Code from RCP')" name="Message"/>
</log>
</then>
<else/>
</filter>
</sequence>
</target>
</iterate>
[Response in log](https://i.sstatic.net/XIohISqc.png)
你的命名空间和 Xpath 是问题所在。更改迭代表达式如下。
<iterate expression="//dss:statusCodePresent" xmlns:dss="TotscoDS">
<target>
<sequence>
.
.
.
</sequence>
</target>
</iterate>