使用XSLT根据每个节点中的第一个元素值对XML节点进行分组
我有一个xml。我需要添加名为SUBMITTER的新xml节点,并根据第一个元素值(即sumbiterid)对每个SIMPLEQUERY节点进行分组使用XSLT根据每个节点中的第一个元素值对XML节点进行分组,xml,xslt,grouping,Xml,Xslt,Grouping,我有一个xml。我需要添加名为SUBMITTER的新xml节点,并根据第一个元素值(即sumbiterid)对每个SIMPLEQUERY节点进行分组 <EIPData> <RESULT> <SIMPLEQUERY> <SUBMITTERID>1</SUBMITTERID>
<EIPData>
<RESULT>
<SIMPLEQUERY>
<SUBMITTERID>1</SUBMITTERID>
<FILENAME>KGP_P_092920_172739_Validated.txt.997</FILENAME>
<RECEIVEDDATETIME>20201014 T 11:01:31</RECEIVEDDATETIME>
</SIMPLEQUERY>
<SIMPLEQUERY>
<SUBMITTERID>1</SUBMITTERID>
<FILENAME>KGP_P_092920_172739_Validated.txt.997</FILENAME>
<RECEIVEDDATETIME>20201014 T 11:01:31</RECEIVEDDATETIME>
</SIMPLEQUERY>
<SIMPLEQUERY>
<SUBMITTERID>2</SUBMITTERID>
<FILENAME>KGP_P_092920_172739_Validated.txt.997</FILENAME>
<RECEIVEDDATETIME>20201014 T 11:01:31</RECEIVEDDATETIME>
</SIMPLEQUERY>
<SIMPLEQUERY>
<SUBMITTERID>2</SUBMITTERID>
<FILENAME>KGP_P_092920_172739_Validated.txt.997</FILENAME>
<RECEIVEDDATETIME>20201014 T 11:01:31</RECEIVEDDATETIME>
</SIMPLEQUERY>
<SIMPLEQUERY>
<SUBMITTERID>3</SUBMITTERID>
<FILENAME>KGP_P_092920_172739_Validated.txt.997</FILENAME>
<RECEIVEDDATETIME>20201014 T 11:01:31</RECEIVEDDATETIME>
</SIMPLEQUERY>
</RESULT>
1.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
1.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
2.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
2.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
3.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
我的输出应该如下所示:(基于第一个元素SUBMITTERID的值进行分组)
1.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
1.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
2.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
2.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
3.
KGP_P_092920_172739_Validated.txt.997
20201014 T 11:01:31
提前感谢。试试这个:
XSLT2.0
<xsl:template match="RESULT">
<xsl:for-each-group select="*" group-by="SUBMITTERID">
<xsl:copy>
<xsl:apply-templates select="current-group()/node()"/>
</xsl:copy>
</xsl:for-each-group>
</xsl:template>
<xsl:key name="querykey" match="SIMPLEQUERY" use="SUBMITTERID"/>
<xsl:template match="RESULT">
<xsl:copy>
<xsl:for-each select="SIMPLEQUERY[generate-id() = generate-id(key('querykey', SUBMITTERID)[1])]">
<xsl:copy>
<xsl:for-each select="key('querykey', SUBMITTERID)">
<xsl:apply-templates select="node()"></xsl:apply-templates>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
参见第页的转换
XSLT1.0
<xsl:template match="RESULT">
<xsl:for-each-group select="*" group-by="SUBMITTERID">
<xsl:copy>
<xsl:apply-templates select="current-group()/node()"/>
</xsl:copy>
</xsl:for-each-group>
</xsl:template>
<xsl:key name="querykey" match="SIMPLEQUERY" use="SUBMITTERID"/>
<xsl:template match="RESULT">
<xsl:copy>
<xsl:for-each select="SIMPLEQUERY[generate-id() = generate-id(key('querykey', SUBMITTERID)[1])]">
<xsl:copy>
<xsl:for-each select="key('querykey', SUBMITTERID)">
<xsl:apply-templates select="node()"></xsl:apply-templates>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
请参见中的转换,您可以使用哪个版本的XSLT?XSLT-1.0或XSLT-2.0或更高版本?请通过电子邮件提供您的尝试。