我想改变输出元素的顺序。它目前显示如下:“数学:英语:科学: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>
答案 0 :(得分:3)
您首先将模板应用于所有qual
子项,然后是每个grade
,然后是每个level
,并获得您应该从中获得的输出。相反,只需在education
模板中按顺序处理孩子:
<xsl:template match="education">
<div style="float:left;">
<xsl:apply-templates select="qualifications/*" />
</div>
</xsl:template>
这会按文档顺序将模板应用于qualifications
的所有子项(即它们在文档中出现的顺序)。无需循环或选择特定的兄弟姐妹。让XSLT处理器为您完成工作。
答案 1 :(得分:1)
这应该做。循环每个qual,在变量中存储位置并按顺序将模板应用于元素:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="education">
<div style="float:left;">
<xsl:for-each select="qualifications/qual">
<xsl:variable name="pos" select="position()"/>
<xsl:apply-templates select="../qual[$pos]"/>
<xsl:apply-templates select="../grade[$pos]"/>
<xsl:apply-templates select="../level[$pos]"/>
</xsl:for-each>
</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>
</xsl:stylesheet>