2013-05-07 65 views
0

我对某个XSLT进行了业务规则更改,但我不确定如何处理它。如果你看下面的XML,你会看到我有一个员工部分和一个设备部分。员工部分有一个嵌套在日期标签和TimeDetail标签中的WorkOrderNumber,并且在Equipment - > EquipmentWorkOrder中嵌套有一个EquipmentWorkOrderNumber。使用XSLT从XML的两个不同部分获取不同的值

我用来仅仅需要获得不同的WorkOrderNumber,因为WorkOrderNumber和EquipmentWorkOrderNumber之间会有相关性,但现在可能会有额外的EquipmentWorkOrderNumber,这些额外的EquipmentWorkOrderNumber不存在于员工WorkOrderNumber部分中。

我需要获取不同的WorkOrderNumber和EquipmentWorkOrderNumber而不复制这些值。我已经尝试了许多以下代码的变体,但没有真正的进展。

<!-- The Key at the top --> 
<xsl:key name="distinctWoEquipWo" match="//WorkOrderNumber | //EquipmentWorkOrderNumber" use="."/> 

<!-- Where I loop through the distinct values --> 
<xsl:for-each select=".//WorkOrderNumber | .//EquipmentWorkOrderNumber[generate-id() = generate-id(key('distinctWoEquipWo', .)[1])]"> 

是否有可能在select中获得不同的WorkOrderNumber和EquipmentWorkOrderNumber值?

这是我正在使用的XML吗?

<?xml-stylesheet type="text/xsl" href="TemplateTest.xsl"?> 
<Timesheet> 
<WeekEnding>Apr 28, 2013</WeekEnding> 
<TeamMember> 
    <EmployeeNumber>AB00910</EmployeeNumber> 
    <EmployeeName>Demo, Derek</EmployeeName> 
    <EmployeeClass>F</EmployeeClass> 
    <Monday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>9</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Monday> 
    <Tuesday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>12</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Tuesday> 
    <Wednesday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>11</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Wednesday> 
    <Thursday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>8</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>3</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Thursday> 
    <Friday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>0</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>7</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Friday> 
    <Saturday /> 
    <Sunday /> 
    <CrewLeader>1</CrewLeader> 
</TeamMember> 
<TeamMember> 
    <EmployeeNumber>BB7789A</EmployeeNumber> 
    <EmployeeName>Employee, Daniel</EmployeeName> 
    <EmployeeClass>AL</EmployeeClass> 
    <Monday /> 
    <Tuesday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>12</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>YES</PerDiem> 
      <Notes>5xfullperdiem</Notes> 
     </TimeDetail> 
    </Tuesday> 
    <Wednesday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>11</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>YES</PerDiem> 
      <Notes>5xfullperdiem</Notes> 
     </TimeDetail> 
    </Wednesday> 
    <Thursday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>8</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>3</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>YES</PerDiem> 
      <Notes>5xfullperdiem</Notes> 
     </TimeDetail> 
    </Thursday> 
    <Friday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>Regular</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>7</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>YES</PerDiem> 
      <Notes>5xfullperdiem</Notes> 
     </TimeDetail> 
    </Friday> 
    <Saturday /> 
    <Sunday /> 
</TeamMember> 
<TeamMember> 
    <EmployeeNumber>CDE890</EmployeeNumber> 
    <EmployeeName>Test, John</EmployeeName> 
    <EmployeeClass>G</EmployeeClass> 
    <Monday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>9</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Monday> 
    <Tuesday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>12</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Tuesday> 
    <Wednesday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>11</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>Over Time</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Wednesday> 
    <Thursday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>8</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>3</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Thursday> 
    <Friday> 
     <TimeDetail> 
      <StartTime>Start</StartTime> 
      <StopTime>Stop</StopTime> 
      <WorkOrderNumber>4812537</WorkOrderNumber> 
      <RegularHoursStartTime>Start</RegularHoursStartTime> 
      <RegularHoursStopTime>Stop</RegularHoursStopTime> 
      <RegularHoursStartTime2>Start</RegularHoursStartTime2> 
      <RegularHoursStopTime2>Stop</RegularHoursStopTime2> 
      <RegularHours>0</RegularHours> 
      <OverTimeStartTime>Start</OverTimeStartTime> 
      <OverTimeStopTime>Stop</OverTimeStopTime> 
      <OverTimeStartTime2>Start</OverTimeStartTime2> 
      <OverTimeStopTime2>Stop</OverTimeStopTime2> 
      <OverTimeHours>7</OverTimeHours> 
      <OtherStartTime>Start</OtherStartTime> 
      <OtherStopTime>Stop</OtherStopTime> 
      <OtherStartTime2>Start</OtherStartTime2> 
      <OtherStopTime2>Stop</OtherStopTime2> 
      <OtherHours>Other</OtherHours> 
      <PerDiem>NO</PerDiem> 
      <Notes>Notes</Notes> 
     </TimeDetail> 
    </Friday> 
    <Saturday /> 
    <Sunday /> 
</TeamMember> 
<Equipment> 
    <EquipmentWorkOrder> 
     <EquipmentWorkOrderNumber>4812537</EquipmentWorkOrderNumber> 
     <EquipmentDetail> 
      <EquipmentMileage>Mileage</EquipmentMileage> 
      <EquipmentHourMeter>Hour Meter</EquipmentHourMeter> 
      <EquipmentType>Bucket truck</EquipmentType> 
      <EquipmentNumber>8s96</EquipmentNumber> 
      <MondayHours>0</MondayHours> 
      <TuesdayHours>12</TuesdayHours> 
      <WednesdayHours>11</WednesdayHours> 
      <ThursdayHours>11</ThursdayHours> 
      <FridayHours>7</FridayHours> 
      <SaturdayHours>Saturday</SaturdayHours> 
      <SundayHours>Sunday</SundayHours> 
      <EquipmentNotes>Notes</EquipmentNotes> 
     </EquipmentDetail> 
     <EquipmentDetail> 
      <EquipmentMileage>Mileage</EquipmentMileage> 
      <EquipmentHourMeter>Hour Meter</EquipmentHourMeter> 
      <EquipmentType>Line truck</EquipmentType> 
      <EquipmentNumber>20x949</EquipmentNumber> 
      <MondayHours>9</MondayHours> 
      <TuesdayHours>12</TuesdayHours> 
      <WednesdayHours>11</WednesdayHours> 
      <ThursdayHours>11</ThursdayHours> 
      <FridayHours>7</FridayHours> 
      <SaturdayHours>Saturday</SaturdayHours> 
      <SundayHours>Sunday</SundayHours> 
      <EquipmentNotes>Notes</EquipmentNotes> 
     </EquipmentDetail> 
     <EquipmentDetail> 
      <EquipmentMileage>Mileage</EquipmentMileage> 
      <EquipmentHourMeter>Hour Meter</EquipmentHourMeter> 
      <EquipmentType>Pickup truck</EquipmentType> 
      <EquipmentNumber>38g356</EquipmentNumber> 
      <MondayHours>9</MondayHours> 
      <TuesdayHours>12</TuesdayHours> 
      <WednesdayHours>11</WednesdayHours> 
      <ThursdayHours>11</ThursdayHours> 
      <FridayHours>7</FridayHours> 
      <SaturdayHours>Saturday</SaturdayHours> 
      <SundayHours>Sunday</SundayHours> 
      <EquipmentNotes>Notes</EquipmentNotes> 
     </EquipmentDetail> 
     <EquipmentDetail> 
      <EquipmentMileage>Mileage</EquipmentMileage> 
      <EquipmentHourMeter>Hour Meter</EquipmentHourMeter> 
      <EquipmentType>Air compressor</EquipmentType> 
      <EquipmentNumber>1d158</EquipmentNumber> 
      <MondayHours>9</MondayHours> 
      <TuesdayHours>12</TuesdayHours> 
      <WednesdayHours>11</WednesdayHours> 
      <ThursdayHours>11</ThursdayHours> 
      <FridayHours>7</FridayHours> 
      <SaturdayHours>Saturday</SaturdayHours> 
      <SundayHours>Sunday</SundayHours> 
      <EquipmentNotes>Notes</EquipmentNotes> 
     </EquipmentDetail> 
    </EquipmentWorkOrder> 
</Equipment> 
</Timesheet> 

感谢您的所有帮助。

+0

你能告诉我们你希望收到XML输出? – ABach 2013-05-07 14:22:21

+0

输出是html,但有很多,但在上面的循环中,我试图用工作订单号打印标题。   ​​的 – inosu812 2013-05-07 14:36:11

+0

@ inosu812似乎适用于我(使用xsltoroc) – 2013-05-07 14:50:14

回答

0

问题是你需要在包含在你的密钥中的节点选择周围使用小括号,如(//WorkOrderNumber | //EquipmentWorkOrderNumber)[generate-id...。否则,您只需循环遍历WorkOrderNumber节点,并仅在密钥中包含EquipmentWorkOrderNumber,并循环访问这些节点。

更充分...

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:key name="workOrderNumberDistinct" match="WorkOrderNumber | EquipmentWorkOrderNumber" use="text()"/> 
    <xsl:template match="/"> 
    <DistinctWorkOrderNumbers> 
     <xsl:for-each select="(//WorkOrderNumber | //EquipmentWorkOrderNumber)[generate-id() = generate-id(key('workOrderNumberDistinct', text())[1])]"> 
     <Number> 
      <xsl:value-of select="."/> 
     </Number> 
     </xsl:for-each> 
    </DistinctWorkOrderNumbers> 
    </xsl:template> 
</xsl:stylesheet> 

输出...

<?xml version="1.0" encoding="UTF-8"?> 
<DistinctWorkOrderNumbers> 
    <Number>4812537</Number> 
</DistinctWorkOrderNumbers> 
+0

如果您复制星期一至星期六的数据,您将看到它带来了两次工单号。我会看看我是否可以获得其他XML数据来证明这一点。 – inosu812 2013-05-07 14:55:33

+0

好的,我自己修改了输入XML并查看你的意思。我上面的转换仍然有效。您需要围绕此'(// WorkOrderNumber | // EquipmentWorkOrderNumber)'的括号。 – davmos 2013-05-07 15:00:44

+0

好的。我还更改了上面的XML数据,以便每个人都可以更全面地了解我所谈论的内容。 – inosu812 2013-05-07 15:03:52