获得此XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="equipos.xsl"?>
<equipos>
<equipo nombre="Los paellas" personas="2"/>
<equipo nombre="Los arrocitos" personas="13"/>
<equipo nombre="Los gambas" personas="6"/>
<equipo nombre="Los mejillones" personas="3"/>
<equipo nombre="Los garrofones" personas="17"/>
<equipo nombre="Los limones" personas="7"/>
</equipos>
应用XSLT的输出必须是:
这是我现在的XSLT,但我没有找到选择“categoria”的第三个条件的方法......
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="equipos">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="equipo">
<xsl:copy>
<xsl:attribute name="nombre">
<xsl:value-of select="@nombre"/>
</xsl:attribute>
<xsl:attribute name="categoria">
<xsl:choose>
<xsl:when test="@personas < 5">
<xsl:text>1</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>2</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
您可以在when
:
choose
元素
<xsl:choose>
<xsl:when test="@personas < 5">
<xsl:text>1</xsl:text>
</xsl:when>
<xsl:when test="@personas <= 10">
<xsl:text>2</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>3</xsl:text>
</xsl:otherwise>
</xsl:choose>
choose
会占用第一个匹配的when
分支,因此您无需在第二个分支中检查>=5
- 您已经知道这一点,因为您没有&#39} ;取第一个。
但是为了将来参考,更方便的XSLT方法可能是使用匹配模板而不是choose
结构:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- copy everything unchanged except when overridden -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
<xsl:template match="@personas[. < 5]" priority="10">
<xsl:attribute name="categoria">1</xsl:attribute>
</xsl:template>
<xsl:template match="@personas[. <= 10]" priority="9">
<xsl:attribute name="categoria">2</xsl:attribute>
</xsl:template>
<xsl:template match="@personas" priority="8">
<xsl:attribute name="categoria">3</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
此处我们需要明确的优先级,因为默认情况下,模式@personas[. < 5]
和@personas[. <= 10]
被视为同等特定。