假设我有以下XML:
<data>
<foos>
<foo id="1" checked="yes" />
<foo id="2" />
<foo id="3" />
<foo id="4" checked="yes" />
</foos>
<bars>
<bar for="1" name="blub" />
<bar for="2" name="bla" />
<bar for="3" name="baz" />
<bar for="4" name="plim" />
</bars>
</data>
Run Code Online (Sandbox Code Playgroud)
现在我想打印name那些bar指向foo具有该属性的元素的元素的所有属性checked.所以对于上面的例子,我的xslt会输出blub和plim.
到目前为止,我所尝试的只是检查是否可以打印每个id属性所属的foo元素的属性bar:
<xsl:template match="/">
<xsl:for-each select="//bars/bar">
<xsl:value-of select="../../foos/foo[@id=./@for]/@id" />
</xsl:for-each>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但无济于事.我认为问题是,该检查foo[@id=./@for]将同时选择@id并@for从foo元素.那么我怎么能说我想要@for来自for循环当前元素的属性,而不是@id来自另一个当前元素?
我怎么能说我想要
@forfor循环中当前元素的属性,但是@id来自其他当前元素?
使用的current()功能:
<xsl:value-of select="../../foos/foo[@id=current()/@for]/@id" />
Run Code Online (Sandbox Code Playgroud)
在方括号内,.是谓词正在测试current()的节点,而是作为当前目标的节点for-each.
| 归档时间: |
|
| 查看次数: |
3748 次 |
| 最近记录: |