Xslt 根据低级属性获取上标记值

Xslt 根据低级属性获取上标记值,xslt,parallel.foreach,Xslt,Parallel.foreach,我对XSL非常陌生,正在考虑用XSL转换xml文件的问题。 我的xml如下所示: <studentlist> <student name="Peter"> <sem name="5> <mod name="science"/> </sem> </student> ... ... </studentlist> 我想提取所有学生的名字,例如,学

我对XSL非常陌生,正在考虑用XSL转换xml文件的问题。 我的xml如下所示:

  <studentlist>
    <student name="Peter">
    <sem name="5>
    <mod name="science"/>
    </sem>
    </student> 
    ...
    ...
    </studentlist>

我想提取所有学生的名字,例如,学习
科学,所以输出是这样的:科学:彼得,威尔,杰弗里

显然,你想把学生按科目分组——那你为什么不这样做呢

XSLT2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/studentlist">
    <xsl:for-each-group select="student" group-by="sem/mod/@name">
        <xsl:value-of select="current-grouping-key()" />
        <xsl:text>: </xsl:text>
        <xsl:value-of select="current-group()/@name" separator=", "/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each-group>
</xsl:template>

</xsl:stylesheet>

: 



您的问题不够清楚。请发布XSLT和预期输出(作为代码)。——我也很困惑,你所说的“重复匹配”是什么意思?你的列表中是否有多个条目针对同一个学生最后,说明是否使用XSLT 1.0或2.0。@michael.hor257k我已经更新了我的起始帖子。你的成绩似乎是个好的开始。我希望我编辑的帖子能把事情弄清楚。所以,基本上,你想按科目对学生进行分组吗?这看起来不错!如果学生有更多的科目怎么办?例如,彼得和薇薇安都学习语言?这应该仍然有效(我已经消除了不必要的假设)。
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/studentlist">
    <xsl:for-each-group select="student" group-by="sem/mod/@name">
        <xsl:value-of select="current-grouping-key()" />
        <xsl:text>: </xsl:text>
        <xsl:value-of select="current-group()/@name" separator=", "/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each-group>
</xsl:template>

</xsl:stylesheet>