XSLT根据分组的子值添加父节点

时间:2018-01-16 16:28:00

标签: xml xslt xslt-2.0 transformation

我是XSLT的新手,我正在试图找出如何根据孩子的价值添加父节点来对数据进行分组。 (我不确定这是否有意义,但很难解释。)

这是原始输出:

request.POST.get("date")

我想有这个输出:

    <root>
    <detailRow>
        <EmployeeID>123456</EmployeeID>
        <LastName>Doe</LastName>
        <FirstName>John</FirstName>
        <CompanyID>Cie_222</CompanyID>
    </detailRow>
    <detailRow>
        <EmployeeID>98765</EmployeeID>
        <LastName>Smith</LastName>
        <FirstName>John</FirstName>
        <CompanyID>Cie_222</CompanyID>
    </detailRow>
    <detailRow>
        <EmployeeID>100859</EmployeeID>
        <LastName>Roe</LastName>
        <FirstName>Richard </FirstName>
        <CompanyID>Cie_227</CompanyID>
    </detailRow>    
</root>

目前我有这段代码:

    <root>
    <GroupCompany id="Cie_222">
        <detailRow>
            <EmployeeID>123456</EmployeeID>
            <LastName>Doe</LastName>
            <FirstName>John</FirstName>
            <CompanyID>Cie_222</CompanyID>
        </detailRow>
        <detailRow>
            <EmployeeID>98765</EmployeeID>
            <LastName>Smith</LastName>
            <FirstName>John</FirstName>
            <CompanyID>Cie_222</CompanyID>
        </detailRow>
    </GroupCompany>

    <GroupCompany id="Cie_227">>        
    <detailRow>
        <EmployeeID>100859</EmployeeID>
        <LastName>Roe</LastName>
        <FirstName>Richard </FirstName>
        <CompanyID>Cie_227</CompanyID>
    </detailRow>
    </GroupCompany>     
</root>

1 个答案:

答案 0 :(得分:0)

您所拥有的分组似乎很好,只有您不需要xsl:copy,而只需要GroupCompany包装和属性的填充:

<xsl:template match="/">
  <root>
      <xsl:for-each-group select="root/detailRow" group-by="CompanyID">
          <xsl:sort select="CompanyID"></xsl:sort>
              <GroupCompany id="{current-grouping-key()}">
                  <xsl:copy-of select="current-group()"/>
              </GroupCompany>
      </xsl:for-each-group>
  </root>     
</xsl:template>