我想改变元素输出的顺序。它目前显示它们是这样的:“数学:英语:科学:ABA(GCSE);(GCSE);(GCSE);”
我需要一种订购方式,以便我可以像这样显示它:
“数学:A(GCSE);英语:B(GCSE);科学:A(GCSE);”
我是 XML 的新手,所以如果可能,请尽量不要展示任何过于复杂的解决方案!
XSL 代码:
<xsl:template match="education">
<div style="float:left;">
<xsl:apply-templates select="qualifications/qual"/>
<xsl:apply-templates select="qualifications/grade"/>
<xsl:apply-templates select="qualifications/level"/>
</div>
</xsl:template>
<xsl:template match="qual"><span style="color:grey; font-size:15px; font-family:verdana;">
<xsl:value-of select="."/></span><p1>:</p1></xsl:template>
<xsl:template match="grade"><span style="color:grey; font-size:15px; font-family:verdana;"><xsl:value-of select="."/></span><p1> </p1></xsl:template>
<xsl:template match="level"><p1> (</p1><span style="color:grey; font-size:15px; font-family:verdana;"><xsl:value-of select="."/></span><p1>);</p1></xsl:template>
XML 代码:
<qualifications>
<qual>Mathematics</qual> <grade>A</grade> <level>GCSE</level>
<qual>English</qual> <grade>B</grade> <level>GCSE</level>
<qual>Science</qual> <grade>A</grade> <level>GCSE</level>
</qualifications>
最佳答案
您首先将模板应用于所有 qual
子项,然后是每个 grade
,然后是每个 level
并获得您应该期望的输出。相反,只需在 education
模板中按顺序处理子项:
<xsl:template match="education">
<div style="float:left;">
<xsl:apply-templates select="qualifications/*" />
</div>
</xsl:template>
这将模板按文档顺序(即它们出现在文档中的顺序)应用于
qualifications
的所有子级。无需循环或选择特定的 sibling 。让 XSLT 处理器为您完成工作。关于XML - 元素未按所需顺序输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23201230/