如何在不显式编写的情况下按特定顺序编写元素属性?
考虑:
<xsl:template match="Element/@1|@2|@3|@4">
<xsl:if test="string(.)">
<span>
<xsl:value-of select="."/><br/>
</span>
</xsl:if>
</xsl:template>
属性应该按顺序出现1, 2, 3, 4
。不幸的是,您无法保证 XML 中属性的顺序,它可能是<Element 2="2" 4="4" 3="3" 1="1">
因此上面的模板将生成以下内容:
<span>2</span>
<span>4</span>
<span>3</span>
<span>1</span>
理想情况下,我不想测试每个属性是否有值。我想知道是否可以以某种方式设置显示顺序?或者我是否需要明确地执行此操作并重复 if 测试,如下所示:
<xsl:template match="Element">
<xsl:if test="string(./@1)>
<span>
<xsl:value-of select="./@1"/><br/>
</span>
</xsl:if>
...
<xsl:if test="string(./@4)>
<span>
<xsl:value-of select="./@4"/><br/>
</span>
</xsl:if>
</xsl:template>
在这种情况下可以做什么?
在之前的问题中,您似乎使用了 XSLT 2.0,因此我希望这次也可以使用 XSLT 2.0 解决方案。
顺序不是在模板的匹配模式中确定的,而是在执行 xsl:apply-templates 时确定的。因此(使用 XSLT 2.0)您可以简单地按照您想要的顺序编写属性序列,例如<xsl:apply-templates select="@att2, @att1, @att3"/>
将按该顺序处理属性。
XSLT 1.0 没有序列,只有节点集。要产生相同的结果,请使用xsl:apply-templates
按要求的顺序,例如:
<xsl:apply-templates select="@att2"/>
<xsl:apply-templates select="@att1"/>
<xsl:apply-templates select="@att3"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)