我的XML代码看起来像这样:
<student_list>
<student name ="Pete">
<text v ="3. Grade (relevant) skilled in Maths."/>
<text v ="But often sleeps."/>
</student>
<student name =" Laura">
<text v ="Biology kid (relevant)."/>
<text v =""/>
</student>
<student name="Audrey">
<text v ="Both inspired by Biology and Maths."/>
</student>
<student name="Mario">
<text v ="Both inspired by Biology and Maths (relevant)."/>
</student>
</student_list>
我想要达到的目标是:
通过名字提取所有学生显示他们的相关科目分开
“相关”是指示是否有必要显示这个孩子的主题。如果相关内容出现在上下文中,则显示主题,否则不显示
由于我只想比较两个科目的开头(生物学和数学),我想说如果一个科目缺失并且背景相关,那么请提及孩子对其他缺失科目不熟练。
输出应按主题排序
具体这应该产生以下输出:
皮特:熟练掌握数学知识
劳拉:没有数学技能
马里奥:熟练掌握数学知识
皮特:没有数学技能
劳拉:熟练掌握生物学
马里奥:熟练掌握生物学
有人能帮助我实现这个目标吗?
我正在使用XSLT 1.0
我正在考虑匹配所有学生,并做几个测试来检查文本属性是否包含特定值,但这是非常Java编码风格,而不是真正的程序性,所以我相信这可以做得更好,更快更容易。但我不知道如何负担得起。
答案 0 :(得分:0)
看看这是否有帮助:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="my">
<xsl:output method="text" encoding="utf-8"/>
<my:subjects>
<subject>Math</subject>
<subject>Biology</subject>
</my:subjects>
<xsl:template match="/student_list">
<xsl:variable name="students" select="student[contains(text/@v, 'relevant')]" />
<xsl:for-each select="document('')/xsl:stylesheet/my:subjects/subject">
<xsl:variable name="subject" select="." />
<xsl:for-each select="$students">
<xsl:value-of select="@name"/>
<xsl:text>: </xsl:text>
<xsl:choose>
<xsl:when test="text[contains(@v, $subject)]">Skilled in </xsl:when>
<xsl:otherwise>Not skilled in </xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$subject"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<强>结果强>:
Pete: Skilled in Math
Laura: Not skilled in Math
Mario: Skilled in Math
Pete: Not skilled in Biology
Laura: Skilled in Biology
Mario: Skilled in Biology