选择具有相同属性名称但值不同的节点

时间:2016-06-01 13:00:35

标签: xpath mule anypoint-studio

我有以下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,以便我回复2222233333。我尝试了下面的xpath,我只获得了第一个22222

/xf:Report_Data/xf:Report_Entry/xf:RoleAssignedTo/xf:ID[@xf:type='Employee_ID']

我的目标是回到22222和33333.在某些情况下,它可能会更多。我非常感谢任何帮助。我需要使用xpath而不使用xslt。

1 个答案:

答案 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> 

您将获得记录器中的所有值,如下所示: -

enter image description here

它将提取XML中可用的 Employee_ID