0

XML ドキュメントのタグで個別の値を取得してカウントする必要があるプロジェクトがあります。XML を見ると、特に火曜日の WorkOrderNumbers の個別の数をカウントしようとしています。後で月曜日などにします。次のコードを試しました。

    <xsl:variable name="tmp" select="count(//Tuesday/TimeDetail/WorkOrderNumber[generate-id() = generate-id(key('distinctWorkOrder', .)[1])])"></xsl:variable>

これは2を返します。私もこれを試しました

    <xsl:variable name="tmp2" select="count(//Tuesday/TimeDetail/WorkOrderNumber[not(.=/preceding-sibling::WorkOrderNumber)])"></xsl:variable>

4 を返します。正解は 3 です。

以下に XML を追加しました。誰かが私が間違っていることを指摘できますか? どうもありがとう。

    <Timesheet>
<WeekEnding>Sep 18, 2011</WeekEnding>
<JobNumber>00010-5523</JobNumber>
<Customer>Test Company INC</Customer>
<TeamMember>
    <EmployeeNumber>10566</EmployeeNumber>
    <EmployeeName>Employee, One</EmployeeName>
    <EmployeeClass>Class</EmployeeClass>
    <Monday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>8</RegularHours>
            <OverTimeHours>3</OverTimeHours>
            <OtherHours>4 - Holiday</OtherHours>
            <Notes>I took the afternoon off.</Notes>
        </TimeDetail>
    </Monday>
    <Tuesday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15101</WorkOrderNumber>
            <RegularHours>2</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Tuesday>
    <Wednesday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Wednesday>
    <Thursday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Thursday>
    <Friday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>2</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Friday>
    <Saturday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Saturday>
    <Sunday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>14963</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>1</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Sunday>
</TeamMember>
<TeamMember>
    <EmployeeNumber>81135</EmployeeNumber>
    <EmployeeName>Employee, Two</EmployeeName>
    <EmployeeClass>Class</EmployeeClass>
    <Monday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15100</WorkOrderNumber>
            <RegularHours>5</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>1 - Company Meetings</OtherHours>
            <Notes>These are my notes.</Notes>
        </TimeDetail>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>22965</WorkOrderNumber>
            <RegularHours>7</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>23570</WorkOrderNumber>
            <RegularHours>Regular</RegularHours>
            <OverTimeHours>1</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Monday>
    <Tuesday></Tuesday>
    <Wednesday></Wednesday>
    <Thursday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>23591</WorkOrderNumber>
            <RegularHours>7</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15100</WorkOrderNumber>
            <RegularHours>1</RegularHours>
            <OverTimeHours>1</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Test</Notes>
        </TimeDetail>
    </Thursday>
    <Friday></Friday>
    <Saturday></Saturday>
    <Sunday></Sunday>
</TeamMember>
<TeamMember>
    <EmployeeNumber>105779</EmployeeNumber>
    <EmployeeName>Employee, Three</EmployeeName>
    <EmployeeClass>W</EmployeeClass>
    <Monday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>19583</WorkOrderNumber>
            <RegularHours>8</RegularHours>
            <OverTimeHours>Over Time</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Monday>
    <Tuesday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15099</WorkOrderNumber>
            <RegularHours>1</RegularHours>
            <OverTimeHours>7</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Tuesday>
    <Wednesday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15099</WorkOrderNumber>
            <RegularHours>1</RegularHours>
            <OverTimeHours>7</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Wednesday>
    <Thursday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15099</WorkOrderNumber>
            <RegularHours>1</RegularHours>
            <OverTimeHours>7</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Thursday>
    <Friday>
        <TimeDetail>
            <StartTime>Start</StartTime>
            <StopTime>Stop</StopTime>
            <WorkOrderNumber>15099</WorkOrderNumber>
            <RegularHours>1</RegularHours>
            <OverTimeHours>7</OverTimeHours>
            <OtherHours>Other</OtherHours>
            <Notes>Notes</Notes>
        </TimeDetail>
    </Friday>
    <Saturday></Saturday>
    <Sunday></Sunday>
</TeamMember>

4

2 に答える 2

3

このXSLT2.0xpath式は、個別の作業指示をカウントします。

count(fn:distinct-values(/*/*/Tuesday/*/WorkOrderNumber))

これがXSLT1.0に相当するものです...

count(/*/*/Tuesday/*/WorkOrderNumber[not(. = following::WorkOrderNumber)])
于 2012-08-15T13:39:45.717 に答える
1

特定の日の個別の要素を探している場合は、日の要素の名前がキーの一部であることを確認する必要があります。

<xsl:key name="distinctWorkOrder" 
   match="TimeDetail" 
   use="concat(local-name(..), '|', WorkOrderNumber)" />

したがって、これは日と作業指示番号の両方を使用します。次に、特定の日の個別のアイテムを次のように数えることができます

<xsl:variable name="tmp" 
 select="count(//Tuesday/TimeDetail
  [generate-id() 
  = generate-id(key('distinctWorkOrder', concat(local-name(..), '|', WorkOrderNumber))[1])])"/> 

これは答え3を与えるはずです。

于 2012-08-14T19:59:21.097 に答える