首页 > 解决方案 > 在xml中添加天数

问题描述

我有一个如下的xml:

    <?xml version='1.0' encoding='UTF-8'?>
    <root>
        <row>
            <employee_id>1111</employee_id>
            <State>TX</State>
            <work_days>2</work_days>
        </row>
        <row>
            <employee_id>1111</employee_id>
            <State>FL</State>
            <work_days>9</work_days>
        </row>
        <row>
            <employee_id>2222</employee_id>
            <State>FL</State>
            <work_days>7</work_days>
        </row>
        <row>
            <employee_id>2222</employee_id>
            <State>NC</State>
            <work_days>1</work_days>
        </row>

我需要对每个员工的 state 和 work_days 数据进行分组,然后分别总结每个组的 Work_days。(请参阅下面的Sum标签)

Expected output:

    <?xml version="1.0" encoding="UTF-8"?>
    <root xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <row>
            <employee_id>1111</employee_id>
            <Data>
                <State>TX</State>
                <Work_days>2</Work_days>
            </Data>
            <Data>
                <State>FL</State>
                <Work_days>9</Work_days>
            </Data>
           <Sum>11</Sum>         <----------
        </row>
        <row>
            <employee_id>2222</employee_id>
            <Data>
                <State>FL</State>
                <Work_days>7</Work_days>
            </Data>
            <Data>
                <State>NC</State>
                <Work_days>1</Work_days>
            </Data>
           <Sum>8</Sum>         <----------
        </row>

我可以使用下面的 xslt 对它们进行分组,但无法总结 wark_days:

    <xsl:template match="root">
        <root>
            <xsl:for-each-group select="row" group-by="employee_id">
                <row>
                    <employee_id><xsl:value-of select="employee_id" /></employee_id>
                    <xsl:for-each select="current-group()">
                        
                        <Data> 
                            <State><xsl:value-of select="State" /></State>
                            <Work_days><xsl:value-of select="work_days" /></Work_days>
                        </Data> 
                    </xsl:for-each>
                    <sum><xsl:value-of select="sum(work_days)"/></sum>         <----------
                </row>    
            </xsl:for-each-group>
        </root>
    </xsl:template>
</xsl:stylesheet>

我现在得到的输出是:

   <row>
      <employee_id>1111</employee_id>
      <Data>
         <State>TX</State>
         <Work_days>2</Work_days>
      </Data>
      <Data>
         <State>FL</State>
         <Work_days>9</Work_days>
      </Data>
      <sum>2</sum>         <----------
   </row>
   <row>
      <employee_id>2222</employee_id>
      <Data>
         <State>FL</State>
         <Work_days>7</Work_days>
      </Data>
      <Data>
         <State>NC</State>
         <Work_days>1</Work_days>
      </Data>
      <sum>7</sum>         <----------
   </row>

请帮助正确获得总和。

标签: xmlxslt

解决方案


采用<xsl:value-of select="sum(current-group()/work_days)"/>


推荐阅读