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,所以我应该取回 2222233333。我尝试了下面的 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