Как определить порядок столбцов таблицы в xslt?
Из следующего XML:
<?xml version="1.0"?>
<lieferungen>
<artikel id="3526">
<name>apfel</name>
<preis stueckpreis="true">8.97</preis>
<lieferant>Fa. Krause</lieferant>
</artikel>
<artikel id="7866">
<name>Kirschen</name>
<preis stueckpreis="false">10.45</preis>
<lieferant>Fa. Helbig</lieferant>
</artikel>
<artikel id="3526">
<name>apfel</name>
<preis stueckpreis="true">12.67</preis>
<lieferant>Fa. Liebig</lieferant>
</artikel>
<artikel id="7789">
<name>Ananas</name>
<preis stueckpreis="true">8.60</preis>
<lieferant>Fa. Richard</lieferant>
</artikel>
</lieferungen>
Я хочу создать таблицу, которая выглядит следующим образом:
С этой целью я написал следующее xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="lieferungen">
<html>
<head>
<title>
<xsl:text>Lieferungen</xsl:text>
</title>
</head>
<body bgcolor="#ffffff">
<h1>
Lieferungen (Deliveries)
</h1>
<hr/>
<table border="1">
<tr>
<th>Nummer</th>
<th>Article</th>
<th>Price</th>
<th>Supplier</th>
</tr>
<xsl:apply-templates/>
</table>
</body>
<hr/>
<p>
</p>
</html>
</xsl:template>
<xsl:template match="artikel">
<tr>
<td>
<xsl:value-of select="@id"/>
</td>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="name">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="preis">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="lieferant">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
Код работал нормально, и я получил свою таблицу... однако, теперь я хочу переключить столбцы, в частности, я хочу переключить столбцы 3 и 4. Для этого я просто переключаю порядок шаблона для "preis" и " Lieferant", то есть новый порядок теперь:
<xsl:template match="lieferant">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="preis">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
Остальной код такой же. Однако этот подход не сработал, и порядок столбцов в таблице остался прежним.
Поэтому мой вопрос: как я могу заставить компьютер использовать
<xsl:template match="lieferant">
в третьем и
<xsl:template match="preis">
для четвертого столбца таблицы?
1 ответ
Порядок, в котором шаблоны появляются в таблице стилей, не имеет значения (кроме случаев разрешения конфликтов). Чтобы переключить столбцы, измените это:
<xsl:template match="artikel">
<tr>
<td>
<xsl:value-of select="@id"/>
</td>
<xsl:apply-templates/>
</tr>
</xsl:template>
к:
<xsl:template match="artikel">
<tr>
<td>
<xsl:value-of select="@id"/>
</td>
<xsl:apply-templates select="name, lieferant, preis"/>
</tr>
</xsl:template>
Не забудьте также поменять метки столбцов.
Также обратите внимание, что вы можете объединить последние три шаблона в один как:
<xsl:template match="name | preis | lieferant">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
и даже сократить весь блок до просто:
<xsl:template match="artikel">
<tr>
<xsl:apply-templates select="@id, name, lieferant, preis"/>
</tr>
</xsl:template>
<xsl:template match="@id | name | preis | lieferant">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>