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行长的表,只有非匹配的模型列被消隐,但其余的仍显示。我该怎么做呢?谢谢!
答案 0 :(得分:1)
将<xsl:apply-templates select="//guitar"/>
更改为<xsl:apply-templates select="//guitar[model = 'Strat']"/>
。请注意,通过阅读StackOverflow答案来学习XSLT和XPath可能有所帮助,但任何基本的XPath教程作为起点可能都是更好的方法。