Xml 在XSLT模板中求和总数时出现问题
我在尝试使用XSLT简单求和一些值时遇到了问题。我在线创建了一个模板,并根据需要对其进行了修改。() 无论我如何尝试,我都无法让模板对数字求和。我要么得到总数为“0”,要么得到我想要求和的数字的串联。如果有人能看一看并指出我的错误所在,我将不胜感激 谢谢 **模板**Xml 在XSLT模板中求和总数时出现问题,xml,xslt,Xml,Xslt,我在尝试使用XSLT简单求和一些值时遇到了问题。我在线创建了一个模板,并根据需要对其进行了修改。() 无论我如何尝试,我都无法让模板对数字求和。我要么得到总数为“0”,要么得到我想要求和的数字的串联。如果有人能看一看并指出我的错误所在,我将不胜感激 谢谢 **模板** print("<xsl:template match="Parts"> <root> <xsl:variable name="tmpTotal">
print("<xsl:template match="Parts">
<root>
<xsl:variable name="tmpTotal">
<total_amount>
<xsl:for-each select="Part">
<item>
<xsl:value-of select="Duration"/>
</item>
</xsl:for-each>
</total_amount>
</xsl:variable>
<total>
<xsl:variable name="myTotal" select="number(msxsl:node-set($tmpTotal))" /> <!--Shows up as 0-->
<xsl:value-of select="sum(msxsl:node-set($myTotal)/total_amount/item)" />
<!--<xsl:variable name="myTotal" select="msxsl:node-set($tmpTotal)" />--> <!-- Shows up as concatenation-->
<!--<xsl:value-of select="msxsl:node-set($myTotal)" />-->
</total>
</root>
</xsl:template>");
打印(“
");
**XML**
print("<Parts>
<Part>
<PartNum>0000-A123</PartNum>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<ProductRemovedNumber>...</ProductRemovedNumber>
<Qty>2</Qty>
<Resolution>False</Resolution>
<ReturnFA>False</ReturnFA>
<SerialNumber />
<TickProblemCD>15</TickProblemCD>
<TicketNum>075020009000048</TicketNum>
<Total>0</Total>
<Total0Decimal>0</Total0Decimal>
<TotalDisplay>0</TotalDisplay>
<UserNumber>009</UserNumber>
</Part>
<Part>
<Duration>2</Duration>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode />
<WorkDoneDesc />
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Travel</PartNum>
<PartDescr>---</PartDescr>
<Qty>2</Qty>
</Part>
<Part>
<Duration>4</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>Install</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>17000</WorkDoneCode>
<WorkDoneDesc>De-Installation / Instrument Move</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>Install</PartDescr>
<Qty>4</Qty>
</Part>
<Part>
<Duration>1</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>TSB/ISA</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>13000</WorkDoneCode>
<WorkDoneDesc>TSB / ISA - Installed</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>TSB/ISA</PartDescr>
<Qty>1</Qty>
</Part>
</Parts>");
打印(“
0000-A123
0
0
...
2.
假的
假的
15
075020009000048
0
0
0
009
2.
0
0
0
试验
假的
旅行
---
2.
4.
真的
12/4/2008下午2:24
12/4/2008
不抱怨
假的
12/4/2008下午2:24
0
0
安装
0
0
0
试验
17000
拆卸/仪器移动
假的
劳动
安装
4.
1.
真的
12/4/2008下午2:24
12/4/2008
不抱怨
假的
12/4/2008下午2:24
0
0
TSB/ISA
0
0
0
试验
13000
TSB/ISA-已安装
假的
劳动
TSB/ISA
1.
");
您没有准确解释要求和的值
从给出的XSLT代码判断,似乎您需要所有“Duration”元素的值之和。这可以使用以下简单的XPath表达式获得:
总和(/*/*/Duration)
下面是完整的XSLT转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/*/Duration)"/>
</xsl:template>
</xsl:stylesheet>
<Parts>
<Part>
<PartNum>0000-A123</PartNum>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<ProductRemovedNumber>...</ProductRemovedNumber>
<Qty>2</Qty>
<Resolution>False</Resolution>
<ReturnFA>False</ReturnFA>
<SerialNumber />
<TickProblemCD>15</TickProblemCD>
<TicketNum>075020009000048</TicketNum>
<Total>0</Total>
<Total0Decimal>0</Total0Decimal>
<TotalDisplay>0</TotalDisplay>
<UserNumber>009</UserNumber>
</Part>
<Part>
<Duration>2</Duration>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode />
<WorkDoneDesc />
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Travel</PartNum>
<PartDescr>---</PartDescr>
<Qty>2</Qty>
</Part>
<Part>
<Duration>4</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>Install</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>17000</WorkDoneCode>
<WorkDoneDesc>De-Installation / Instrument Move</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>Install</PartDescr>
<Qty>4</Qty>
</Part>
<Part>
<Duration>1</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>TSB/ISA</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>13000</WorkDoneCode>
<WorkDoneDesc>TSB / ISA - Installed</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>TSB/ISA</PartDescr>
<Qty>1</Qty>
</Part>
</Parts>
当此转换应用于提供的XML文档时:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/*/Duration)"/>
</xsl:template>
</xsl:stylesheet>
<Parts>
<Part>
<PartNum>0000-A123</PartNum>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<ProductRemovedNumber>...</ProductRemovedNumber>
<Qty>2</Qty>
<Resolution>False</Resolution>
<ReturnFA>False</ReturnFA>
<SerialNumber />
<TickProblemCD>15</TickProblemCD>
<TicketNum>075020009000048</TicketNum>
<Total>0</Total>
<Total0Decimal>0</Total0Decimal>
<TotalDisplay>0</TotalDisplay>
<UserNumber>009</UserNumber>
</Part>
<Part>
<Duration>2</Duration>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode />
<WorkDoneDesc />
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Travel</PartNum>
<PartDescr>---</PartDescr>
<Qty>2</Qty>
</Part>
<Part>
<Duration>4</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>Install</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>17000</WorkDoneCode>
<WorkDoneDesc>De-Installation / Instrument Move</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>Install</PartDescr>
<Qty>4</Qty>
</Part>
<Part>
<Duration>1</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>TSB/ISA</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>13000</WorkDoneCode>
<WorkDoneDesc>TSB / ISA - Installed</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>TSB/ISA</PartDescr>
<Qty>1</Qty>
</Part>
</Parts>
0000-A123
0
0
...
2.
假的
假的
15
075020009000048
0
0
0
009
2.
0
0
0
试验
假的
旅行
---
2.
4.
真的
12/4/2008下午2:24
12/4/2008
不抱怨
假的
12/4/2008下午2:24
0
0
安装
0
0
0
试验
17000
拆卸/仪器移动
假的
劳动
安装
4.
1.
真的
12/4/2008下午2:24
12/4/2008
不抱怨
假的
12/4/2008下午2:24
0
0
TSB/ISA
0
0
0
试验
13000
TSB/ISA-已安装
假的
劳动
TSB/ISA
1.
产生所需结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/*/Duration)"/>
</xsl:template>
</xsl:stylesheet>
<Parts>
<Part>
<PartNum>0000-A123</PartNum>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<ProductRemovedNumber>...</ProductRemovedNumber>
<Qty>2</Qty>
<Resolution>False</Resolution>
<ReturnFA>False</ReturnFA>
<SerialNumber />
<TickProblemCD>15</TickProblemCD>
<TicketNum>075020009000048</TicketNum>
<Total>0</Total>
<Total0Decimal>0</Total0Decimal>
<TotalDisplay>0</TotalDisplay>
<UserNumber>009</UserNumber>
</Part>
<Part>
<Duration>2</Duration>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode />
<WorkDoneDesc />
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Travel</PartNum>
<PartDescr>---</PartDescr>
<Qty>2</Qty>
</Part>
<Part>
<Duration>4</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>Install</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>17000</WorkDoneCode>
<WorkDoneDesc>De-Installation / Instrument Move</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>Install</PartDescr>
<Qty>4</Qty>
</Part>
<Part>
<Duration>1</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>TSB/ISA</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>13000</WorkDoneCode>
<WorkDoneDesc>TSB / ISA - Installed</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>TSB/ISA</PartDescr>
<Qty>1</Qty>
</Part>
</Parts>
7
编辑:在一篇评论中,OP解释说,他希望对所有零件的持续时间
求和,这些零件的零件号
等于“人工”
以下XPath表达式生成此总和:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/*/Duration)"/>
</xsl:template>
</xsl:stylesheet>
<Parts>
<Part>
<PartNum>0000-A123</PartNum>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<ProductRemovedNumber>...</ProductRemovedNumber>
<Qty>2</Qty>
<Resolution>False</Resolution>
<ReturnFA>False</ReturnFA>
<SerialNumber />
<TickProblemCD>15</TickProblemCD>
<TicketNum>075020009000048</TicketNum>
<Total>0</Total>
<Total0Decimal>0</Total0Decimal>
<TotalDisplay>0</TotalDisplay>
<UserNumber>009</UserNumber>
</Part>
<Part>
<Duration>2</Duration>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode />
<WorkDoneDesc />
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Travel</PartNum>
<PartDescr>---</PartDescr>
<Qty>2</Qty>
</Part>
<Part>
<Duration>4</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>Install</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>17000</WorkDoneCode>
<WorkDoneDesc>De-Installation / Instrument Move</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>Install</PartDescr>
<Qty>4</Qty>
</Part>
<Part>
<Duration>1</Duration>
<DurationRequired>True</DurationRequired>
<EndTime>12/4/2008 2:24 PM</EndTime>
<EndTimeOnly>12/4/2008</EndTimeOnly>
<FamilyName>NON-COMPLAINT</FamilyName>
<FOC>False</FOC>
<InvTxnGenerated />
<LastUpdatedDate>12/4/2008 2:24 PM</LastUpdatedDate>
<Rate>0</Rate>
<Rate0Decimal>0</Rate0Decimal>
<RateType>TSB/ISA</RateType>
<Total>0</Total>
<PartCost>0.00</PartCost>
<PartCost0Decimal>0</PartCost0Decimal>
<PerformedBy>TEST</PerformedBy>
<WorkDoneCode>13000</WorkDoneCode>
<WorkDoneDesc>TSB / ISA - Installed</WorkDoneDesc>
<ZoneBasedTravel>False</ZoneBasedTravel>
<PartNum>Labor</PartNum>
<PartDescr>TSB/ISA</PartDescr>
<Qty>1</Qty>
</Part>
</Parts>
总和(/*/*[PartNum='labour']/Duration)
+1,并应接受回答。我特别想了解如何在xsl中执行总计。但看起来Dave关闭了他的账户。