#xml #xslt
#xml #xslt
Вопрос:
У меня есть такой XML
<row>
<col>1</col>
<col>name1</col>
<col>link1</col>
<col>junk1</col>
<col>value1</col>
</row>
<row>
<col>2</col>
<col>name2</col>
<col>link2</col>
<col>junk2</col>
<col>value2</col>
</row>
как мне написать XSLT, чтобы получить этот вывод? третий столбец в каждой строке содержит ссылку, а четвертое значение не нужно печатать в выходных данных
<tr>
<td>1<td>
<td><a href="link1">name1</a></td>
<td>value1<td>
</tr>
<tr>
<td>2<td>
<td><a href="link2">name2</a></td>
<td>value<td>
</tr>
Ответ №1:
Просмотр вашего XSLT поможет понять, почему вы получаете несортированный вывод. Но в любом случае попробуйте <xsl:sort select="col/text()"/>
.
Ответ №2:
Следующий XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/table">
<xsl:copy>
<xsl:apply-templates select="row">
<xsl:sort select="col[1]"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="row">
<tr>
<td>
<xsl:value-of select="col[1]"/>
</td>
<td>
<a href="{col[3]}">
<xsl:value-of select="col[2]"/>
</a>
</td>
<td>
<xsl:value-of select="col[5]"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
При применении к следующему входному XML
<table>
<row>
<col>1</col>
<col>name1</col>
<col>link1</col>
<col>junk1</col>
<col>value1</col>
</row>
<row>
<col>2</col>
<col>name2</col>
<col>link2</col>
<col>junk2</col>
<col>value2</col>
</row>
</table>
выдаст следующий вывод
<table>
<tr>
<td>1</td>
<td>
<a href="link1">name1</a>
</td>
<td>value1</td>
</tr>
<tr>
<td>2</td>
<td>
<a href="link2">name2</a>
</td>
<td>value2</td>
</tr>
</table>
Обратите внимание на использование шаблонов значений атрибутов (AVT) для установки атрибута href для тега a:
<a href="{col[3]}">
Вы также можете отказаться от xsl:sort, если вы просто хотите, чтобы порядок строк в выходных данных совпадал с порядком во входном XML.