Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
XPath比较节点属性_Xpath - Fatal编程技术网

XPath比较节点属性

XPath比较节点属性,xpath,Xpath,我有一个xml文档,呈现如下内容: <foo> <bar a="first"> <baz b="test" c="x"> </baz> </bar> <bar a="second"> <baz b="test" c="y"> </baz> </bar> <bar a="third">

我有一个xml文档,呈现如下内容:

<foo>
  <bar a="first">
        <baz b="test"  c="x">
        </baz>
  </bar>
  <bar a="second">
        <baz b="test" c="y">
        </baz>
  </bar>
  <bar a="third">
        <baz b="noTest" c="y">
        </baz>
  </bar>
</foo>

我想选择所有存在2个不同baz子节点的“bar”节点,其中b的值相同,但c的值不同。 因此,在上面的示例中,我想选择前两个节点,但不选择第三个

以下是我的尝试:

//bar[baz/@b=跟随兄弟姐妹::bar/baz/@b和baz/@c!=跟随兄弟姐妹::bar/baz/@c]

我的问题是,虽然这在示例中起作用,但它并没有达到我想要的效果:如果存在另一个baz节点,且bar/@b具有相同的值,并且如果存在另一个baz节点,且bar/@c具有不同的值,则它会选择该节点;如果存在另一个baz节点,且两个baz节点的bar/@b相同,而bar/@c不同,则情况并非如此


是否可以组合这两个条件,以便它们检查相同的以下同级节点?

我认为在XPath 1.0中不可能这样做,除非匹配的
bar
节点相邻?如果是这样,您可以使用
//bar[baz[(following::bar[1]/baz/@b=@b和following::bar[1]/baz/@c!=@c)或(previous::bar[1]/baz/@b=@b和previous::bar[1]/baz/@c!=@c)]
我认为这在XPath 1.0中是不可能的,除非匹配的
bar
节点相邻?如果是这样,您可以使用
//bar[baz[(following::bar[1]/baz/@b=@b和following::bar[1]/baz/@c!=@c)或(preference::bar[1]/baz/@b=@b和preference::bar[1]/baz/@c!=@c)]