使用XSL填充表以根据条件进行过滤

时间:2017-03-15 11:12:10

标签: html xml xslt html-table

XSL转换相当新,但一直在搜索堆栈溢出几个小时,并且无法实现我的目标。我有一个xml文档,我想通过xsl样式表转到一个表,但我想根据节点的值只选择XML的特定文件。这是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="guitarsXSLStyleSheet.xsl" type="text/xsl"?>
<guitars>
    <guitar>
        <model>Strat</model>
        <year>1978</year>
        <price>2500</price>
    </guitar>
    <guitar>
        <model>Jaguar</model>
        <year>2006</year>
        <price>400</price>
    </guitar>
    <guitar>
        <model>Strat</model>
        <year>2015</year>
        <price>900</price>
    </guitar>
    <guitar>
        <model>Tele</model>
        <year>1981</year>
        <price>1200</price>
    </guitar>
</guitars>

现在我有一个xsl样式表,它将这一切都输出到表中:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <table id="guitarTable" border="1" width="200">
            <tr class="header">
                <th>Model</th>
                <th>Year</th>
                <th>Price</th>
            </tr>
            <xsl:apply-templates select="//guitar"/>
        </table>
    </xsl:template>

    <xsl:template match="guitar">
        <tr>
            <td> <xsl:value-of select="model" /> </td>
            <td> <xsl:value-of select="year" />  </td>
            <td> <xsl:value-of select="price" /> </td>

        </tr>
    </xsl:template>

</xsl:stylesheet>

现在,让我们说我试图生成一个表格,该表格只显示Strats的所有列,但仅显示Strats。我该怎么做?

我想可能会更改行<td> <xsl:value-of select="model" /> </td>

<td> <xsl:value-of select="model[text()='Strat']" /> </td>

会这样做,但它仍然给我一个4行长的表,只有非匹配的模型列被消隐,但其余的仍显示。我该怎么做呢?谢谢!

1 个答案:

答案 0 :(得分:1)

<xsl:apply-templates select="//guitar"/>更改为<xsl:apply-templates select="//guitar[model = 'Strat']"/>。请注意,通过阅读StackOverflow答案来学习XSLT和XPath可能有所帮助,但任何基本的XPath教程作为起点可能都是更好的方法。