我意识到这段代码不是最干净的,但不幸的是,正确地重构它不是一种选择。
问题是我希望position()
在第二次迭代中返回一个真值。但是当使用position()
它时,它永远不会返回 true,正如第二次迭代所预期的那样。
但是如果我对选择值进行硬编码,它会返回预期的结果。这是一个例子:
<root>
<MainProducts>
<MainProduct>
<Published>0</Published>
</MainProduct>
<MainProduct>
<Published>1</Published>
</MainProduct>
</MainProducts>
<SubProducts>
<SubProduct>
<IsDefault>1</IsDefault>
</SubProduct>
<SubProduct>
<IsDefault>0</IsDefault>
</SubProduct>
</SubProducts>
</root>
XML 内容:
<xsl:for-each select="/root/SubProducts/SubProduct">
<script type="text/javascript">
// Always returns false
console.log("Dynamic position " + <xsl:value-of select="position()" /> + " IsDefault: " + ( <xsl:value-of select="/root/MainProducts/MainProduct[position()]/Published" /> == 1 ? "true" : "false" ));
</script>
</xsl:for-each>
<script type="text/javascript">
// Returns false, but expected to return true on second iteration.
console.log("Hard coded position 1 IsDefault: " + ( <xsl:value-of select="/root/MainProducts/MainProduct[1]/Published" /> == 1 ? "true" : "false" ));
// Returns true
console.log("Hard coded position 2 IsDefault: " + ( <xsl:value-of select="/root/MainProducts/MainProduct[2]/Published" /> == 1 ? "true" : "false" ));
</script>
这是确切的控制台输出:
Dynamic position 1 IsDefault: false
Dynamic position 2 IsDefault: false
Hard coded position 1 IsDefault: false
Hard coded position 2 IsDefault: true
我在这里缺少什么position()
没有正确选择节点?