你能幫我解決這個代碼嗎
我的場景是根據位置顯示結果我需要為每個位置輸出兩個欄位。我正在使用分組來實作這一點。所有位置和工資率組合的小時欄位相同,但員工計數欄位不同。這就是問題所在。
我的 XML 代碼:
<wd:Report_Data
xmlns:wd="urn:com.workday.report/TEST_PB">
<wd:Report_Entry>
<wd:location>Canada</wd:location>
<wd:payRate>Salary</wd:payRate>
<wd:salcount>10</wd:salcount>
<wd:hours>250</wd:hours>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:location>Canada</wd:location>
<wd:payRate>Hourly</wd:payRate>
<wd:hrlycount>3</wd:hrlycount>
<wd:hours>120</wd:hours>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:location>Canada</wd:location>
<wd:payRate>CWR</wd:payRate>
<wd:cwrcount>2</wd:cwrcount>
<wd:hours>100</wd:hours>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:location>USA</wd:location>
<wd:payRate>Salary</wd:payRate>
<wd:salcount>7</wd:salcount>
<wd:hours>200</wd:hours>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:location>USA</wd:location>
<wd:payRate>Hourly</wd:payRate>
<wd:hrlycount>5</wd:hrlycount>
<wd:hours>500</wd:hours>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:location>USA</wd:location>
<wd:payRate>CWR</wd:payRate>
<wd:cwrcount>10</wd:cwrcount>
<wd:hours>700</wd:hours>
</wd:Report_Entry>
</wd:Report_Data>
我的 xsl 代碼:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wd="urn:com.workday.report/TEST_PB" exclude-result-prefixes="xs"
version="2.0" xmlns:functx="http://www.functx.com">
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="NEWLINE" select="'
'"/>
<xsl:variable name="COMMA" select="','"/>
<xsl:template match="/">
<xsl:call-template name="DetailRecords"/>
</xsl:template>
<xsl:template name="DetailRecords">
<xsl:for-each-group select="wd:Report_Data/wd:Report_Entry" group-by="wd:location">
<xsl:sort select="wd:location"/>
<xsl:value-of select="concat(wd:location,$COMMA)"/>
<xsl:if test="wd:payRate = 'Salary'">
<xsl:value-of select="current-group()/wd:hours" separator="," />
</xsl:if>
<xsl:if test="wd:payRate = 'Hourly'">
<xsl:value-of select="current-group()/wd:hours" separator="," />
</xsl:if>
<xsl:if test="wd:payRate = 'CWR'">
<xsl:value-of select="current-group()/wd:hours" separator="," />
</xsl:if>
<xsl:if test="wd:payRate = 'Salary'">
<xsl:value-of select="current-group()/wd:salcount" separator="," />
</xsl:if>
<xsl:if test="wd:payRate = 'Hourly'">
<xsl:value-of select="current-group()/wd:hrlycount" separator="," />
</xsl:if>
<xsl:if test="wd:payRate = 'CWR'">
<xsl:value-of select=" wd:cwrcount" separator="," />
</xsl:if>
<xsl:value-of select="$NEWLINE"/>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
***Current Output:***
Canada,250,120,10010
USA,200,500,7007
***Expected Output:***
Canada,250,10,120,3,100,2
USA,200,7,500,5,700,10
uj5u.com熱心網友回復:
我想你想要例如(XSLT 3)
<xsl:for-each-group select="wd:Report_Data/wd:Report_Entry" group-by="wd:location">
<xsl:sort select="wd:location"/>
<xsl:value-of select="current-grouping-key(), current-group()!(wd:hours, wd:salcount, wd:hrlycount, wd:cwrcount)" separator=","/>
<xsl:value-of select="$NEWLINE"/>
</xsl:for-each-group>
或 (XSLT 2)
<xsl:for-each-group select="wd:Report_Data/wd:Report_Entry" group-by="wd:location">
<xsl:sort select="wd:location"/>
<xsl:value-of select="current-grouping-key(), for $e in current-group() return ($e/wd:hours, $e/wd:salcount, $e/wd:hrlycount, $e/wd:cwrcount)" separator=","/>
<xsl:value-of select="$NEWLINE"/>
</xsl:for-each-group>
我不確定如果使用xsl:for-each-group
XSLT 2.0 中引入的問題為什么會被標記為 xslt-1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512779.html
下一篇:以#(哈希)開頭的XML檔案