如何计算类别中的元素并将其与XSLT中的其他类别进行比较 [英] How to count elements in categorys and compare it with other categorys in XSLT
本文介绍了如何计算类别中的元素并将其与XSLT中的其他类别进行比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有问题:-)
我想打印出一个xml并为其编写一个xslt.问题是我想用我的xml元素建立一个表,但是我必须计算每行是否具有相同数量的列,如果没有,我必须添加一个value元素.
i would like to print out a xml and write a xslt for it. the problem is that i would like to build a table with my xml-elements but i must count if each row has the same amount of columns and if not i have to add a value element.
我知道一旦设置了值就无法更改变量值,但是我该如何比较进程的类别/表行数量呢? (并添加空行)
i know that i cant change a variables value once i have set the value but how can i compare the categorys/table-rows amount of processes then? (and add empty rows)
XML:
<Settings>
...
..
<DashBoard>
<Category NAME="ph" PICNAME="prh">
<Process NAME="pd" URL="" PICNAME="prh_prd" />
<Process NAME="md" URL="" PICNAME="prh_prd" />
<Process NAME="t" URL="" PICNAME="prh_prd" />
</Category>
<Category NAME="cm" PICNAME="cam">
<Process NAME="ps" URL="" PICNAME="cam_pls" />
<Process NAME="ea" URL="" PICNAME="cam_eas" />
</Category>
<Category NAME="sm" PICNAME="sum">
<Process NAME="frm" URL="" PICNAME="sum_frm" />
</Category>
</DashBoard>
</Settings>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl=".....">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="relurl" select="/Settings/Picture/@RELATIVEURL"/>
<xsl:template match="Settings">
<table id="dashframe" >
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="Category">
<xsl:variable name="altname" select="@NAME" />
<xsl:variable name="picname" select="@PICNAME" />
<tr>
<th>
<img alt="{$altname}" src="{$relurl}dash_{$picname}_p_01.png" />
</th>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="Process">
<xsl:variable name="altname" select="@NAME" />
<xsl:variable name="picname" select="@PICNAME" />
<td>
<img alt="{$altname}" src="{$relurl}dash_{$picname}_p_01.png" />
</td>
</xsl:template>
</xsl:stylesheet>
所需的输出:
<table id="dashframe" >
<tr>
<th>titel 1</th>
<td>....</td>
<td>....</td>
<td>....</td>
</tr>
<tr>
<th>titel 2</th>
<td>....</td>
<td>....</td>
<td></td>
</tr>
<tr>
<th>titel 3</th>
<td>....</td>
<td></td>
<td></td>
</tr>
</table>
推荐答案
此样式表保存您的样式:
Preserving yours, this stylesheet:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:variable name="relurl" select="/Settings/Picture/@RELATIVEURL"/>
<xsl:variable name="vColumns">
<xsl:for-each select="/Settings/DashBoard/Category">
<xsl:sort select="count(Process)" order="descending"/>
<xsl:if test="position()=1">
<xsl:value-of select="count(Process)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:template match="DashBoard">
<table id="dashframe" border="1">
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="Category">
<tr>
<th>
<img alt="{@NAME}" src="{$relurl}dash_{@PICNAME}_p_01.png"/>
</th>
<xsl:call-template name="process"/>
</tr>
</xsl:template>
<xsl:template name="process">
<xsl:param name="pColumn" select="number($vColumns)"/>
<xsl:if test="$pColumn">
<xsl:call-template name="process">
<xsl:with-param name="pColumn" select="$pColumn - 1"/>
</xsl:call-template>
<td>
<xsl:variable name="vColumn" select="Process[$pColumn]"/>
<xsl:if test="$vColumn">
<img alt="{$vColumn/@NAME}"
src="{$relurl}dash_{$vColumn/@PICNAME}_p_01.png"/>
</xsl:if>
</td>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
使用此输入:
<Settings>
<DashBoard>
<Category NAME="ph" PICNAME="prh">
<Process NAME="pd" URL="" PICNAME="prh_prd" />
<Process NAME="md" URL="" PICNAME="prh_prd" />
<Process NAME="t" URL="" PICNAME="prh_prd" />
</Category>
<Category NAME="cm" PICNAME="cam">
<Process NAME="ps" URL="" PICNAME="cam_pls" />
<Process NAME="ea" URL="" PICNAME="cam_eas" />
</Category>
<Category NAME="sm" PICNAME="sum">
<Process NAME="frm" URL="" PICNAME="sum_frm" />
</Category>
</DashBoard>
</Settings>
输出:
<table id="dashframe" border="1">
<tr>
<th><img alt="ph" src="dash_prh_p_01.png"></th>
<td><img alt="pd" src="dash_prh_prd_p_01.png"></td>
<td><img alt="md" src="dash_prh_prd_p_01.png"></td>
<td><img alt="t" src="dash_prh_prd_p_01.png"></td>
</tr>
<tr>
<th><img alt="cm" src="dash_cam_p_01.png"></th>
<td><img alt="ps" src="dash_cam_pls_p_01.png"></td>
<td><img alt="ea" src="dash_cam_eas_p_01.png"></td>
<td></td>
</tr>
<tr>
<th><img alt="sm" src="dash_sum_p_01.png"></th>
<td><img alt="frm" src="dash_sum_frm_p_01.png"></td>
<td></td>
<td></td>
</tr>
</table>
注意:众所周知的最大成语.
Note: Well known maximum idiom.
这篇关于如何计算类别中的元素并将其与XSLT中的其他类别进行比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文