XPath查询如何根据两个属性获取一个属性的值

Ume*_*cha 12 xml xpath

我想从以下标记中提取名称属性值

<application
    comments="Do not erase this one"
    executable="run_CIET"
    icon="default"
    instances="1"
    mode="1"
    name="CIET"
    order="10"
    selection="1"
    tool="y"
/>
Run Code Online (Sandbox Code Playgroud)

我可以根据模式值轻松获取name属性值的值,如下所示

xpath Applications.xml '//applications/application[@mode='3']'/@name
Run Code Online (Sandbox Code Playgroud)

但是,如果我想添加更多的条件,"当模式= X时获取名称属性值,并且应用程序标签中没有工具属性"

我们如何做到这一点?我试过类似的东西

xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我之前没有使用XPath,我发现它很棘手我在XPath上搜索W3C帮助但是没找到我想要的东西.请帮忙.

Dim*_*hev 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
Run Code Online (Sandbox Code Playgroud)

是XPath中的无效语法.有一个!=操作员,但没有!操作员.

用途:

//applications/application[@mode='3' and not(@tool)]/@name 
Run Code Online (Sandbox Code Playgroud)

您应该总是尽量避免两件事:

  1. 使用!=运算符 - 它具有奇怪的定义并且不像not()函数那样 - 如果其中一个操作数是节点集,则不使用它.

  2. 尽量避免使用//缩写 - 这可能会导致显着的低效率,并且还会出现大多数人无法接受的异常行为.


Fly*_*179 6

使用not(@tool)而不是!@tool应该做的工作.如果你的XPath引擎没有表现出来,你可以想象count(@tool)=0,但这不应该是必要的.