与属性值“匹配的XPATH表达式”;“真的”;

与属性值“匹配的XPATH表达式”;“真的”;,xpath,expression,Xpath,Expression,我有这样一些XML: <engine-set> <engine host-ref="blah1.com"> <property name="foo" value="true"/> <property name="bar" value="true"/> </engine> <engine host-ref="blah2.com"> <property name="foo" value="true"/&

我有这样一些XML:

<engine-set>
  <engine host-ref="blah1.com">
  <property name="foo" value="true"/>
  <property name="bar" value="true"/>
 </engine>
 <engine host-ref="blah2.com">
  <property name="foo" value="true"/>
  <property name="bar" value="false"/>
 </engine>
</engine-set>

我想匹配所有引擎元素,这些元素的子节点属性的名称等于“bar”,值等于“true”。我发现XML中出现“true”这一事实导致我的条件在XPath表达式中总是计算为true。附近有路吗?我正在使用Python和lxml

编辑:

我的xpath表达式是(不起作用)是: //引擎[(property/@name='bar'和property/@value=“true”)]

谢谢,你是这么说的

//engine[property[@name='bar' and @value='true']]

给你太多的结果?因为对我来说,它只给出了一个。你尝试了什么XPath表达式

以下内容在获取“blah1.com”而不是“blah2.com”时似乎效果不错:
//引擎[属性[@value=“true”][@name=“bar”]]

请记住,您需要将参数测试值括在引号中

我想匹配所有引擎元素

这是:

//engine
具有子节点属性的

现在变成了:

//engine[property]
名称等于“bar”

更具体地说:

//engine[property[@name = 'bar']] 
和值等于“真”

最后:

//engine[property[@name = 'bar' and @value = 'true']] 

我意识到我的xpath一直在工作,我在做一些愚蠢的事情。尽管如此,迪米特里还是得到了我想要的答案。谢谢就我个人而言,我在使用双引号时遇到了一些问题。我必须使用单引号。