Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT根据每个节点中的第一个元素值对XML节点进行分组_Xml_Xslt_Grouping - Fatal编程技术网

使用XSLT根据每个节点中的第一个元素值对XML节点进行分组

使用XSLT根据每个节点中的第一个元素值对XML节点进行分组,xml,xslt,grouping,Xml,Xslt,Grouping,我有一个xml。我需要添加名为SUBMITTER的新xml节点,并根据第一个元素值(即sumbiterid)对每个SIMPLEQUERY节点进行分组 <EIPData> <RESULT> <SIMPLEQUERY> <SUBMITTERID>1</SUBMITTERID>

我有一个xml。我需要添加名为SUBMITTER的新xml节点,并根据第一个元素值(即sumbiterid)对每个SIMPLEQUERY节点进行分组

    <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或更高版本?请通过电子邮件提供您的尝试。