我有以下xml文档
<?xml version="1.0" encoding="UTF-8"?>
<xf:Report_Data xmlns:xf="urn:com.xforce.report/Job_History">
<xf:Report_Entry>
<xf:EmployeeID>11111</xf:EmployeeID>
<xf:Name xf:Descriptor="E Botha">
<xf:ID xf:type="XID">1111111111111</xf:ID>
<xf:ID xf:type="Employee_ID">22222</xf:ID>
</xf:Name>
<xf:RoleAssignedTo xf:Descriptor="Lena Johnson-Bey (51961)">
<xf:ID xf:type="WID">222222222222</xf:ID>
<xf:ID xf:type="Employee_ID">222222</xf:ID>
</xf:RoleAssignedTo>
<xf:RoleAssignedTo xf:Descriptor="Allison Sisk (21849)">
<xf:ID xf:type="XID">333333333333</xf:ID>
<xf:ID xf:type="Employee_ID">33333</xf:ID>
</xf:RoleAssignedTo>
</xf:Report_Entry>
</xf:Report_Data>
我需要提取Employee_ID
下的xf:RoleAssignedTo
,以便我回复22222
和33333
。我尝试了下面的xpath,我只获得了第一个22222
:
/xf:Report_Data/xf:Report_Entry/xf:RoleAssignedTo/xf:ID[@xf:type='Employee_ID']
我的目标是回到22222和33333.在某些情况下,它可能会更多。我非常感谢任何帮助。我需要使用xpath而不使用xslt。
答案 0 :(得分:2)
您可以使用以下方法使用XPATH3提取所有 Employee_ID 的值: -
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration" />
<flow name="splitxml2Flow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/split" doc:name="HTTP"/>
<set-variable variableName="originalPayload" value="#[message.payloadAs(java.lang.String)]" doc:name="Variable"/>
<splitter expression="#[xpath3('//*:Report_Data/*:Report_Entry/*:RoleAssignedTo', message.payload, 'NODESET')]" doc:name="Splitter"/>
<logger level="INFO" message="Employee_ID:- #[xpath3('*:ID[2]')]" doc:name="Logger"/>
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
<set-payload doc:name="Set Payload" value="Done"/>
</flow>
您将获得记录器中的所有值,如下所示: -
它将提取XML中可用的 Employee_ID