计数具有多个条件和精确属性的xml元素
我有以下代码(xml和xslt),我想用两个条件计算一些xml元素 XML代码:计数具有多个条件和精确属性的xml元素,xml,xslt,count,multiple-conditions,Xml,Xslt,Count,Multiple Conditions,我有以下代码(xml和xslt),我想用两个条件计算一些xml元素 XML代码: <home> <place Value='place1'> <property Name="Type" Value="house" /> <property Name="Context" Value="roof" /> <property Name="Color" Value="blue" />
<home>
<place Value='place1'>
<property Name="Type" Value="house" />
<property Name="Context" Value="roof" />
<property Name="Color" Value="blue" />
</place>
<place Value='place2'>
<property Name="Type" Value="house" />
<property Name="Context" Value="kitchen" />
<property Name="Color" Value="red" />
</place>
<place Value='>
<property Name="Type" Value="house" />
<property Name="Context" Value="floor" />
<property Name="Color" Value="black" />
</place>
<place Value='place4'>
<property Name="Type" Value="house" />
<property Name="Context" Value="kitchen" />
<property Name="Color" Value="black" />
</place>
<place Value='place5'>
<property Name="Type" Value="apartment" />
<property Name="Context" Value="roof" />
<property Name="Color" Value="blue" />
</place>
<place Value='place6'>
<property Name="Type" Value="apartment" />
<property Name="Context" Value="kitchen" />
<property Name="Color" Value="red" />
</place>
</home>
如果要计算“房子”和“厨房”的位置,请使用此表达式:
每个谓词都限制上一上下文的结果节点集。如果在位置路径上有两个谓词,则必须考虑第一个限制位置路径表达式的结果节点集,创建一个新的上下文(具有较少的节点),然后在这个较小的集合上应用第二谓词。
在您的情况下,此表达式:
/home/place/property
结果生成一个包含18项的节点集。添加第一个谓词时:
/home/place/property[@Name='Type' and @Value='house']
现在您有了一个新的上下文,只有四个节点:
/home[1]/place[1]/property[1]
/home[1]/place[2]/property[1]
/home[1]/place[3]/property[1]
/home[1]/place[4]/property[1]
第二个谓词仅应用于这四个节点。当你添加它的时候
[@Name='Context' and @Value='kitchen']
对于表达式(或上面的任何一个节点),它将返回一个空集
如果将这些谓词中的任何一个单独添加到位置路径中,则会得到结果。如果要考虑所有这些,则应该执行集合的联合操作:
/home/place/property[@Name='Type' and @Value='house'] | /home/place/property[@Name='Context' and @Value='kitchen']
这将为您提供七个节点。最后一个XPath表达式不会返回任何结果我的目标是选择类型为house、上下文为kitchen的节点。所以我应该有两个节点。Lingamurthy CS找到了正确的解决方案。但也谢谢你的帮助。
[@Name='Context' and @Value='kitchen']
/home/place/property[@Name='Type' and @Value='house'] | /home/place/property[@Name='Context' and @Value='kitchen']