CLM Doc Gen高级解释示例我的xml,如下。对于每个"部件"节点集,我将成本乘以数量(成本*数量)。这在节点集级别上工作得很好。我想把所有的(成本*数量)加起来,并把TOTAL放在我的文档的底部。
我只能使用xpath 2.0(不能使用xslt函数)。这可能吗?
提前感谢!
<AddPart_Container displayName="Add Sensor(s)" displayValue="Add Sensor(s)">
<Part displayName="Part (Sensor 02)" displayValue="Part (Sensor 02)">
<PartCategory>Hardware</PartCategory>
<PartName>Wireless Enterprise Vibration Sensor V3 (1 MP per)</PartName>
<PartNumber>PR55-61E</PartNumber>
<Cost>366.95</Cost>
<DirectPrice>492.95</DirectPrice>
<Qty>200</Qty>
</Part>
<Part displayName="Part (Sensor 04)" displayValue="Part (Sensor 04)">
<PartCategory>Hardware</PartCategory>
<PartName>Wireless 3 Channel Current Sensor - 0 to 100 (3 MP per)</PartName>
<PartNumber>PR55-26C</PartNumber>
<Cost>337.94</Cost>
<DirectPrice>492.95</DirectPrice>
<Qty>10</Qty>
</Part>
</AddPart_Container>
下面的对于每个节点都很好(我使用的程序有独特的语法)。现在我只需要为所有的节点集求和,我真的很挣扎,因为我正在求和这个计算字段。
<# <Content Select="round((./DirectPrice * ./Qty div 12) * 100) div 100"/> #>
我可能会使用for
表达式来遍历所有Part
元素并返回每个Part
的计算结果,从而产生一系列数值。然后可以使用XPathsum
函数按该顺序对数字求和。像这样:
sum(
for $part in
//Part
return
round(($part/DirectPrice * $part/Qty div 12) * 100) div 100
)
Result:8626.62
使用这个简单的XPath 2.0表达式——不需要for
表达式:
sum( Part/(round(DirectPrice * Qty div 12 * 100) div 100))
基于XSLT 2.0的验证:
当这个变换:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:sequence select=
"sum( Part/(round(DirectPrice * Qty div 12 * 100) div 100))"/>
</xsl:template>
</xsl:stylesheet>
应用于所提供的XML文档:
<AddPart_Container displayName="Add Sensor(s)" displayValue="Add Sensor(s)">
<Part displayName="Part (Sensor 02)" displayValue="Part (Sensor 02)">
<PartCategory>Hardware</PartCategory>
<PartName>Wireless Enterprise Vibration Sensor V3 (1 MP per)</PartName>
<PartNumber>PR55-61E</PartNumber>
<Cost>366.95</Cost>
<DirectPrice>492.95</DirectPrice>
<Qty>200</Qty>
</Part>
<Part displayName="Part (Sensor 04)" displayValue="Part (Sensor 04)">
<PartCategory>Hardware</PartCategory>
<PartName>Wireless 3 Channel Current Sensor - 0 to 100 (3 MP per)</PartName>
<PartNumber>PR55-26C</PartNumber>
<Cost>337.94</Cost>
<DirectPrice>492.95</DirectPrice>
<Qty>10</Qty>
</Part>
</AddPart_Container>
对XPath表达式求值,并输出该求值的正确的预期结果:
8626.62
:
只有少数人知道并使用(路径表达式的)轴步可以是函数调用这一事实。这正是这个解决方案所使用的。
查看这些规则:
https://www.w3.org/TR/xpath20/prod-xpath-StepExpr
https://www.w3.org/TR/xpath20/prod-xpath-FilterExpr
https://www.w3.org/TR/xpath20/doc-xpath-PrimaryExpr
https://www.w3.org/TR/xpath20/doc-xpath-FunctionCall