如何让我的xsl文件显示销售价格?

时间:2012-03-26 02:53:23

标签: xml xslt

我正在进行一项任务,我应该以不同的方式展示杂货。我似乎无法确定xsl文件是错误的还是xml文件,或两者兼而有之。  
转让片段:
一切 库存中的物品应具有销售价格,无论其是否在售。将通过具有值“是”或“否”的销售属性来识别待售物品。 sale属性应放在ID标记中。如果销售标签为“是”,则使用销售价格,否则使用常规价格。

我的问题是,无论是@ sale =“是”还是“否”,只会显示常规价格

<body>
    <table> 
        <xsl:for-each select="catalog/item">            

                <tr>
                    <xsl:attribute name="sale">
                            <xsl:value-of select="id"/>
                        </xsl:attribute>
                    <td><xsl:value-of select="company"/></td>
                    <td><xsl:value-of select="product"/></td>
                    <td><xsl:value-of select="category"/></td>
                    <td><xsl:value-of select="description"/></td>
                    <xsl:choose>
                        <xsl:when test="@sale = 'yes'">
                            <td><xsl:value-of select="sale"/></td>
                        </xsl:when>
                        <xsl:otherwise>
                            <td><xsl:value-of select="price"/></td>
                        </xsl:otherwise>
                    </xsl:choose>
                    <td><xsl:value-of select="unit"/></td>
                    <td>
                        <img>
                            <xsl:attribute name="src">
                                <xsl:value-of select="picture"/>
                            </xsl:attribute>
                    </img>
                    </td>
                </tr>

        </xsl:for-each>
    </table>
</body>

和带有2个项目样本的XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="sale.xsl" xsl:import href="company.xsl" xsl:import href="category.xsl"?>

<!DOCTYPE catalog SYSTEM "stock.dtd">

<catalog>
<item>
    <id sale="yes">801</id>
    <company>Grocery Gateway</company>  
    <product>Organic Strawberries</product> 
    <category>Produce</category>    
    <description>Fresh and organic strawberries imported from U.S.A. This product is subject to availability</description>  
    <price>5.99</price>
    <sale>4.99</sale>
    <unit>454g</unit>
    <picture>pics/M6548[1].jpg</picture>
</item>
<item>
    <id sale="no">101</id>
    <company>Nestle </company>  
    <product>Pure Life Spring Water</product>   
    <category>Beverages</category>  
    <description>Ingredients are spring water, and ozone. </description>    
    <price>5.99</price>
    <sale>4.99</sale>
    <unit>24x500mL</unit>
    <picture>pics/M58629[1].jpg</picture>
</item></catalog> 

1 个答案:

答案 0 :(得分:0)

它没有正确显示销售价格的原因是因为您错误地引用了@sale属性。

<xsl:when test="@sale = 'yes'">

上面尝试在当前for-each迭代中查找名为sale的属性(在本例中为catalog/item,但该属性在XML中的此节点上不存在)。您需要明确说明您正在id节点上查找它,如下所示:

<xsl:when test="id/@sale = 'yes'">