Select 具有相同属性名称但不同值的节点
Select node with same attribute name and but different values
我有以下 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>
我需要提取 xf:RoleAssignedTo
下的 Employee_ID
,所以我应该取回 22222
和 33333
。我尝试了下面的 xpath,但我只得到了第一个 22222
:
/xf:Report_Data/xf:Report_Entry/xf:RoleAssignedTo/xf:ID[@xf:type='Employee_ID']
我的目标是取回 22222 和 33333。在某些情况下,它可能更多。我将不胜感激任何帮助。我需要在不求助于 xslt 的情况下使用 xpath。
您可以使用以下方式使用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>
您将获得 logger 中的所有值,如下所示:-
它将尽可能多地提取 Employee_ID XML
我有以下 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>
我需要提取 xf:RoleAssignedTo
下的 Employee_ID
,所以我应该取回 22222
和 33333
。我尝试了下面的 xpath,但我只得到了第一个 22222
:
/xf:Report_Data/xf:Report_Entry/xf:RoleAssignedTo/xf:ID[@xf:type='Employee_ID']
我的目标是取回 22222 和 33333。在某些情况下,它可能更多。我将不胜感激任何帮助。我需要在不求助于 xslt 的情况下使用 xpath。
您可以使用以下方式使用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>
您将获得 logger 中的所有值,如下所示:-
它将尽可能多地提取 Employee_ID XML