对于XSLT和XPath,我有点像新手,所以我遇到了这个问题。 我正在基于数据库的视图创建一个简单的表,它需要对视图中的一些列求和。我能做的就是添加'SUM_'作为我想要求和的所有coumns的前缀,并在显示coulmn名称时用子串切断该标签。
以下是我的XML示例:
<Rowset>
<Columns>
<Column Description="SegmentResponseGlobId" MaxRange="1" MinRange="0" Name="SegmentResponseGlobId" SQLDataType="12" SourceColumn="SegmentResponseGlobId"></Column>
<Column Description="Batch" MaxRange="1" MinRange="0" Name="Batch" SQLDataType="12" SourceColumn="Batch"></Column>
<Column Description="Start" MaxRange="1" MinRange="0" Name="Start" SQLDataType="93" SourceColumn="Start"></Column>
<Column Description="Slut" MaxRange="1" MinRange="0" Name="Slut" SQLDataType="93" SourceColumn="Slut"></Column>
<Column Description="Rute" MaxRange="1" MinRange="0" Name="Rute" SQLDataType="8" SourceColumn="Rute"></Column>
<Column Description="Tankvogn" MaxRange="1" MinRange="0" Name="Tankvogn" SQLDataType="8" SourceColumn="Tankvogn"></Column>
<Column Description="SUM_Mængde" MaxRange="1" MinRange="0" Name="SUM_Mængde" SQLDataType="8" SourceColumn="SUM_Mængde"></Column>
<Column Description="EquipmentId" MaxRange="1" MinRange="0" Name="EquipmentId" SQLDataType="12" SourceColumn="EquipmentId"></Column>
<Column Description="SLS" MaxRange="1" MinRange="0" Name="SLS" SQLDataType="8" SourceColumn="SLS"></Column>
<Column Description="PH" MaxRange="1" MinRange="0" Name="PH" SQLDataType="8" SourceColumn="PH"></Column>
</Columns>
<Row>
<SegmentResponseGlobId>AD86D4EC-5E5E-4B6A-A3FC-4BEDF62F3545</SegmentResponseGlobId>
<Batch>9492002</Batch>
<Start>2009-12-01T11:13:43</Start>
<Slut>2009-12-02T19:37:55</Slut>
<Rute>0</Rute>
<Tankvogn>6</Tankvogn>
<SUM_Mængde>1</SUM_Mængde>
<EquipmentId>A1_C1U11_Udvejning_råmælk</EquipmentId>
<SLS>0</SLS>
<PH>NA</PH>
</Row>
<Row>
<SegmentResponseGlobId>28D65598-98D0-41CD-BB6B-6E962834D8F2</SegmentResponseGlobId>
<Batch>Prod.Batch</Batch>
<Start>2009-07-01T10:41:54</Start>
<Slut>2009-12-04T07:42:40</Slut>
<Rute>137</Rute>
<Tankvogn>7037</Tankvogn>
<SUM_Mængde>2</SUM_Mængde>
<EquipmentId>A1_C1U02_Indvejning_2_råmælk</EquipmentId>
<SLS>1</SLS>
<PH>NA</PH>
</Row>
</Rowset>
这是我的XSL:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<thead>
<xsl:for-each select="Rowsets/Rowset/Columns/Column">
<xsl:choose>
<xsl:when test="substring(@Description, 1, 4) = 'SUM_'">
<th><xsl:value-of select="substring(@Description,5)"/></th>
</xsl:when>
<xsl:otherwise>
<th><xsl:value-of select="@Description"/></th>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</thead>
<tbody>
<xsl:for-each select="Rowsets/Rowset/Row">
<tr>
<xsl:for-each select="child::*">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
<tr>
<xsl:for-each select="Rowsets/Rowset/Columns/Column">
<td>
<xsl:if test="substring(@Description, 1, 4) = 'SUM_'">
Sum: <xsl:value-of select="sum(/Rowsets/Rowset/Row/@Description)"/>
</xsl:if>
</td>
</xsl:for-each>
</tr>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
现在,正是这段代码给了我一些白发:
<xsl:for-each select="Rowsets/Rowset/Columns/Column">
<td>
<xsl:if test="substring(@Description, 1, 4) = 'SUM_'">
Sum: <xsl:value-of select="sum(/Rowsets/Rowset/Row/@Description)"/>
</xsl:if>
</td>
</xsl:for-each>
我似乎无法弄清楚如何将它与SUM_xxx列相加。 希望有人可以帮我找到解决方案=)在此之前,我将不得不核心需要总结的列...
答案 0 :(得分:1)
我现在无法测试,但请尝试:
sum(/Rowsets/Rowset/Row/*[name()=current()/@Description])
这是元素的总和(任何元素,因此“*”),其中名称等于当前节点的描述属性。
答案 1 :(得分:0)
我想你想要:
<xsl:if test="substring(@Description, 1, 4) = 'SUM_'">
<xsl:text>Sum: </xsl:text>
<xsl:value-of select="
sum(/Rowsets/Rowset/Row/*[name() = current()/@SourceColumn])
"/>
</xsl:if>