我想改变元素输出的顺序。它目前显示它们是这样的:“数学:英语:科学: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/

10-09 09:24