有没有办法使用当前上下文中的数据来过滤statsource中其他位置的节点。
例如,如果我有这个XML:
<root>
<group1>
<inst>
<type>Foo</type>
<value>First Foo</value>
</inst>
<inst>
<type>Bar</type>
<value>The Bar</value>
</inst>
<inst>
<type>Foo</type>
<value>Second Foo</value>
</inst>
</group1>
<group2>
<Filter>
<FilterType>Foo</FilterType>
</Filter>
<Filter>
<FilterType>Bar</FilterType>
</Filter>
</group2>
</root>
假设我的上下文是Filter标记之一,我想返回获取group1中指定类型的实例数。我想编写看起来像这样的XPATH:
count(/root/group1/inst[type = **FilterType**])
我可以使用任何东西在原始上下文中获取FilterType吗?
答案 0 :(得分:1)
这可以在XPath 2.0中轻松完成:
for $type in /*/*/Filter[1]/FilterType
return
count(/*/group1/*[type eq $type])
当针对提供的XML文档评估此Xpath表达式时,将返回正确的结果:
<强> 2 强>
在XPath 1.0中,如果事先知道group1/inst
个元素的数量,并且$ vType代表有问题的FilterType,那么可以构造以下XPath 1.0表达式:
($vType = /*/group1/inst[1]/type)
+
($vType = /*/group1/inst[2]/type)
+
($vType = /*/group1/inst[3]/type)
再次产生:
2
最后,如果在XSLT中需要XPath 1.0表达式并且“Filter”是当前节点,
然后以下XPath表达式计算确切的匹配数:
count(/*/group1/inst[type = curent()/FilterType])
答案 1 :(得分:0)
我正在寻找解决同样问题的方法。目前,我正在使用变量来绕过这个...它看起来像下面的
<xsl:variable name='FilterType'><xsl:value-of select='FilterType'/></xsl:variable>
<xsl:value-of select='count(/root/group1/inst[type = $FilterType])'/>
但必须有更好的方法。