我想从以下标记中提取名称属性值
<application
comments="Do not erase this one"
executable="run_CIET"
icon="default"
instances="1"
mode="1"
name="CIET"
order="10"
selection="1"
tool="y"
/>
我可以根据模式值轻松获取name属性值的值,如下所示
xpath Applications.xml '//applications/application[@mode='3']'/@name
但是如果我想添加更多条件,那就是“当模式= X并且应用程序标签中没有工具属性时获取名称属性值”
我们怎么做?我试过像
这样的东西xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
但它不起作用。
我之前没有使用XPath,我发现它很棘手我在XPath上搜索W3C帮助但是没找到我想要的东西。请帮忙。
答案 0 :(得分:17)
How do we do this? I tried something like
xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
but its not working.
!@tool
是XPath中的无效语法。有一个!=
运算符,但没有!
运算符。
使用强>:
//applications/application[@mode='3' and not(@tool)]/@name
你应该总是尽量避免两件事:
使用!=
运算符 - 它具有奇怪的定义,并且行为不像not()
函数 - 如果其中一个操作数是节点集,则不使用它。 / p>
尽量避免使用//
缩写 - 这可能会导致效率低下,并且还会出现大多数人无法接受的异常行为。
答案 1 :(得分:5)
使用not(@tool)
代替!@tool
可以完成这项工作。如果您的XPath引擎不正常,您可以想象count(@tool)=0
,但这不是必需的。