因此,我一直在试图理解为什么当我输入似乎正确的(语法明智)时,XPath没有返回正确的值。
这里的目标是创建一个Gs1标签,该标签显示“容器”的总量以及哪个容器是当前容器。({总计}的容器{i} )
在这个具体的例子中,for循环遍历ASNShipmentContainers部分,了解ASNShipmentContainers中有6个ASNShipmentContainer,因此打印出6个不同的标签。
我认为,which ()函数将是返回我的foreach循环正在执行的迭代的最佳方法。我上上下下地搜索了一下,并意识到这将是最简单和正确的方法。但是在实现它时,它经常在每个标签上返回一个"1“,而不是递增。
此外,当我试图找到总容器的值时,我使用: count(ASNShipmentContainers/ASNShipmentContainer),,它与foreach循环中声明的内容相同,应该返回我的容器总值6,但这也返回了1。
以下是相关代码:
<xsl:variable name="ROOT" select="." />
<!--For each loop, knows there are 6 iterations-->
<xsl:for-each select="ASNShipmentContainers/ASNShipmentContainer">
<Section Margins="5,5">
<!--Start creation of table that will display info here-->
<Table Width="275" Height="30" Margins="161,0,0,0">
<Row Height="100%">
<Cell Borders="Black" Width=".125"/>
<Cell Width="274.375">
<Text>Count:<xsl:value-of select="position()" /> of <xsl:value-of select="count(ASNShipmentContainers/ASNShipmentContainer))" /></Text>
</Cell>
<Cell Borders="Black" Width=".5"/>
</Row>
</Table>
</Section>
</xsl:for-each>那么,为什么当我这样做的时候,位置值和总容器数量都是"1“。我的理解是,即使在for-each循环中调用它,该位置也应该工作。
另外,如果我要求清点集装箱,难道我不应该收到总量吗?为什么它会给我1分。
我唯一能想象的是,不知怎的,我的循环/select语句的作用域关闭了。这需要再使用一次吗?
编辑:谢谢你的快速反应,但这个问题实际上与XSL无关。在与以前使用过此代码的人一起工作之后,他向我解释说,问题来自我们的C#代码,而不是XSL本身。C#将删除它目前没有处理的所有元素,因此每次我试图计算所有元素时,它都会给我一个,因为从技术上讲,只有一个。
谢谢。
发布于 2014-10-22 19:45:49
当您处于以下情况时:
<xsl:for-each select="ASNShipmentContainers/ASNShipmentContainer">这句话:
count(ASNShipmentContainers/ASNShipmentContainer)尝试计算ASNShipmentContainer元素,这些元素是当前节点的子节点ASNShipmentContainers的子元素。我觉得这不是你想要的。
要在当前级别计数ASNShipmentContainer元素,请尝试:
count(../ASNShipmentContainer)或者--最好是--在调用for-each之前定义一个带有计数的变量,以避免重复计数相同的事情。
不确定如何处理position() --您必须发布一个更完整的示例,这样我们才能重现问题。
https://stackoverflow.com/questions/26515007
复制相似问题