代码之家  ›  专栏  ›  技术社区  ›  Umesh K

xpath查询如何基于两个属性获取一个属性的值

  •  11
  • Umesh K  · 技术社区  · 14 年前

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

    <application
        comments="Do not erase this one"
        executable="run_CIET"
        icon="default"
        instances="1"
        mode="1"
        name="CIET"
        order="10"
        selection="1"
        tool="y"
    />
    

    我可以很容易地根据模式值得到名称属性值的值,如下所示

    xpath Applications.xml '//applications/application[@mode='3']'/@name
    

    但如果我想添加更多的条件,即“当模式=x且工具属性不在应用程序标记中时获取名称属性值”

    我们该怎么做?我试过类似的东西

    xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
    

    但它不起作用。

    我以前没有使用过xpath,我发现在w3c帮助中搜索xpath很困难,但没有找到我想要的。请帮忙。

    2 回复  |  直到 7 年前
        1
  •  17
  •   Dimitre Novatchev    14 年前
    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 
    

    有两件事你应该尽量避免:

    1. 使用 != operator——它有奇怪的定义,并且行为不像 not() 函数——如果其中一个操作数是节点集,则永远不要使用它。

    2. 尽量避免使用 // 缩写——这可能会导致显著的效率低下,也会导致大多数人不喜欢的异常行为。

        2
  •  5
  •   Flynn1179    14 年前

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