我们有一个需求,即我们需要按共享三个共同点的细分进行分组...我已经附上了示例输入和期望输出。如果有人帮忙,那会很好。
我们需要根据国家/地区,公司名称和出生月份进行分组。
我已经尝试过 ,而且我是初学者...所以无法成功。
这是我们的输入
<?xml version='1.0' encoding='utf-8'?>
<EMPDTLS>
<EMP>
<FIRST_NAME>John</FIRST_NAME>
<LAST_NAME>Mathew</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>DEC</MONTH_OF_BIRTH>
<COMPANY_NAME>TCS</COMPANY_NAME>
<BAND>B</BAND>
</EMP>
<EMP>
<FIRST_NAME>Luis</FIRST_NAME>
<LAST_NAME>Phillip</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>DEC</MONTH_OF_BIRTH>
<COMPANY_NAME>TCS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>Nick</FIRST_NAME>
<LAST_NAME>Tatar</LAST_NAME>
<COUNTRY>USA</COUNTRY>
<MONTH_OF_BIRTH>JAN</MONTH_OF_BIRTH>
<COMPANY_NAME>CTS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>Zuza</FIRST_NAME>
<LAST_NAME>Bark</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>JUNE</MONTH_OF_BIRTH>
<COMPANY_NAME>TCS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>Jane</FIRST_NAME>
<LAST_NAME>ellis</LAST_NAME>
<COUNTRY>ENGLAND</COUNTRY>
<MONTH_OF_BIRTH>JUNE</MONTH_OF_BIRTH>
<COMPANY_NAME>IBM</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>SANJAY</FIRST_NAME>
<LAST_NAME>BAWARI</LAST_NAME>
<COUNTRY>ENGLAND</COUNTRY>
<MONTH_OF_BIRTH>JUNE</MONTH_OF_BIRTH>
<COMPANY_NAME>IBM</COMPANY_NAME>
<BAND>B</BAND>
</EMP>
<EMP>
<FIRST_NAME>Akhi</FIRST_NAME>
<LAST_NAME>Mahe</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>SEPT</MONTH_OF_BIRTH>
<COMPANY_NAME>IBM</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>Vishh</FIRST_NAME>
<LAST_NAME>Bombard</LAST_NAME>
<COUNTRY>GERMANY</COUNTRY>
<MONTH_OF_BIRTH>OCT</MONTH_OF_BIRTH>
<COMPANY_NAME>IBM</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>Sharon</FIRST_NAME>
<LAST_NAME>Watson</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>JULY</MONTH_OF_BIRTH>
<COMPANY_NAME>CTS</COMPANY_NAME>
<BAND>B</BAND>
</EMP>
<EMP>
<FIRST_NAME>Poo</FIRST_NAME>
<LAST_NAME>Smith</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>SEPT</MONTH_OF_BIRTH>
<COMPANY_NAME>CTS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>John</FIRST_NAME>
<LAST_NAME>Smith</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>DEC</MONTH_OF_BIRTH>
<COMPANY_NAME>TCS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
</EMPDTLS>
<Desired Output>
<?xml version='1.0' encoding='utf-8'?>
<EMPDTLS>
<EmpGrp>
<EMP>
<FIRST_NAME>John</FIRST_NAME>
<LAST_NAME>Mathew</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>DEC</MONTH_OF_BIRTH>
<COMPANY_NAME>TCS</COMPANY_NAME>
<BAND>B</BAND>
</EMP>
<EMP>
<FIRST_NAME>Luis</FIRST_NAME>
<LAST_NAME>Phillip</LAST_NAME>
<COUNTRY>INDIA</COUNTRY>
<MONTH_OF_BIRTH>DEC</MONTH_OF_BIRTH>
<COMPANY_NAME>TCS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
</EmpGrp>
<EmpGrp>
<EMP>
<FIRST_NAME>Nick</FIRST_NAME>
<LAST_NAME>Tatar</LAST_NAME>
<COUNTRY>USA</COUNTRY>
<MONTH_OF_BIRTH>JAN</MONTH_OF_BIRTH>
<COMPANY_NAME>CTS</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
</EmpGrp>
<EmpGrp>
<EMP>
<FIRST_NAME>Jane</FIRST_NAME>
<LAST_NAME>ellis</LAST_NAME>
<COUNTRY>ENGLAND</COUNTRY>
<MONTH_OF_BIRTH>JUNE</MONTH_OF_BIRTH>
<COMPANY_NAME>IBM</COMPANY_NAME>
<BAND>A</BAND>
</EMP>
<EMP>
<FIRST_NAME>SANJAY</FIRST_NAME>
<LAST_NAME>BAWARI</LAST_NAME>
<COUNTRY>ENGLAND</COUNTRY>
<MONTH_OF_BIRTH>JUNE</MONTH_OF_BIRTH>
<COMPANY_NAME>IBM</COMPANY_NAME>
<BAND>B</BAND>
</EMP>
</EmpGrp>
**
答案 0 :(得分:0)
在XSLT 3(自2017年夏季以来最新版本的XSLT,并由Saxon 9.8或9.9以及Altova 2017或2018或2019支持)中,复合分组键要简单一些。 for-each-group composite="yes" group-by="COUNTRY, COMPANY_NAME, MONTH_OF_BIRTH"
:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output indent="yes"/>
<xsl:template match="EMPDTLS">
<xsl:copy>
<xsl:for-each-group select="EMP" composite="yes" group-by="COUNTRY, COMPANY_NAME, MONTH_OF_BIRTH">
<EmpGrp>
<xsl:copy-of select="current-group()"/>
</EmpGrp>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您可以在https://xsltfiddle.liberty-development.net/jyRYYhU/1在线对其进行测试。
对于XSLT 2,如果没有其他教科书,请参阅https://cranesoftwrights.github.io/books/ptux/index.htm,以获取对XSLT的彻底处理;或者,请参见规范https://www.w3.org/TR/xslt20/#grouping-examples,其中包含“ A Composite Grouping Key”作为第二个示例通过嵌套for-each-group
。 XSLT 2中的另一种技术是将组成分组键的各种项目连接到一个字符串,例如group-by="string-join((COUNTRY, COMPANY_NAME, MONTH_OF_BIRTH), '|')"
,确保分隔符(例如|
)不包含在任何关键项值中。