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