XSLT2。0使用变量vs直接选择选择特定于节点
我试图在表单元格中处理每个规则,但在使用变量时,访问正确的属性值时遇到问题 我试图只处理底层规则(@flags=“b”)。鉴于此xmlXSLT2。0使用变量vs直接选择选择特定于节点,xslt,xslt-2.0,Xslt,Xslt 2.0,我试图在表单元格中处理每个规则,但在使用变量时,访问正确的属性值时遇到问题 我试图只处理底层规则(@flags=“b”)。鉴于此xml <?xml version="1.0" encoding="UTF-8"?> <cell> <rules> <rule flags="t" width="0.3528" colour="black"/> <rule flags="b" width="0.3528" co
<?xml version="1.0" encoding="UTF-8"?>
<cell>
<rules>
<rule flags="t" width="0.3528" colour="black"/>
<rule flags="b" width="0.3528" colour="black"/>
<rule flags="b" width="0.7056" colour="none"/>
<rule flags="b" width="0.3528" colour="black"/>
</rules>
<para>19.3%</para>
</cell>
19.3%
如果我使用这个xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="cell">
<xsl:variable name="i">2</xsl:variable>
<xsl:value-of select="child::rules/rule[contains(@flags, 'b')][2]/@width"/>
</xsl:template>
</xsl:stylesheet>
2.
结果是“0.7056”,这是我正在寻找的,但是如果我在select中使用变量
<xsl:value-of select="child::rules/rule[contains(@flags, 'b')][$i]/@width"/>
结果是“0.3528 0.7056 0.3528”。它获取了我所有规则元素的width属性,而不仅仅是第二个,即使变量的值为2
我想知道为什么使用一个变量和一个特定的数字会产生不同,我该如何解决这个问题。对于变量,您必须使用
<xsl:value-of select="child::rules/rule[contains(@flags, 'b')][position() = $i]/@width"/>
在创建变量时,将“2”放在变量内,如下所示:
<xsl:variable name="i">2</xsl:variable>
<xsl:variable name="i" select="2"/>
我认为它必须将变量视为字符串而不是整数,但有办法强制执行吗?好的,但这是绝对位置,还是具有@flags=b标准的节点内的位置?这是规则包含@flags=b的绝对位置。
<xsl:value-of select="rules/rule[tokenize(@flags,'\s+')='b'][$i]/@width"/>