如何确定 xslt 中 table 列的顺序?
How to determine the order of table columns in 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>
我想创建一个如下所示的 table:
为此我写了下面的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>
代码运行良好,我得到了 table ... 但是,现在我想切换列,特别是我想切换第 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>
其余代码相同。但是这种方法没有奏效,table 中列的顺序保持不变。
因此我的问题是:如何让电脑使用
<xsl:template match="lieferant">
在第三和
<xsl:template match="preis">
对于第四列table?
模板在样式表中的出现顺序没有意义(解决冲突时除外)。要切换列,请更改:
<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>
来自以下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>
我想创建一个如下所示的 table:
为此我写了下面的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>
代码运行良好,我得到了 table ... 但是,现在我想切换列,特别是我想切换第 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>
其余代码相同。但是这种方法没有奏效,table 中列的顺序保持不变。
因此我的问题是:如何让电脑使用
<xsl:template match="lieferant">
在第三和
<xsl:template match="preis">
对于第四列table?
模板在样式表中的出现顺序没有意义(解决冲突时除外)。要切换列,请更改:
<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>