Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计数具有多个条件和精确属性的xml元素_Xml_Xslt_Count_Multiple Conditions - Fatal编程技术网

计数具有多个条件和精确属性的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" />

我有以下代码(xml和xslt),我想用两个条件计算一些xml元素

XML代码:

<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']