Довольно новичок в преобразованиях 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>
to
<td> <xsl:value-of select="model[text()='Strat']" /> </td>
сделал бы это, но он по-прежнему дает мне таблицу длиной 4 строки, в которой только несоответствующие столбцы модели закрашены, но остальные все еще отображаются. Как мне это сделать? Спасибо!
<xsl:apply-templates select="//guitar[model = 'Str']"/>
15.03.2017