代码之家  ›  专栏  ›  技术社区  ›  bisko

xPath奇怪行为-即使设置了[1]也选择所有元素

  •  1
  • bisko  · 技术社区  · 17 年前

    <div class="resultcontainer">
       <div class="info">
         <div class="title">
            <a>
               some text
            </a>
         </div>
       </div>
    </div>
    
    <div class="resultcontainer">
       <div class="info">
         <div class="title">
            <a>
               some other text
            </a>
         </div>
       </div>
    </div>
    
    <div class="resultcontainer">
       <div class="info">
         <div class="title">
            <a>
               some even unrelated text
            </a>
         </div>
       </div>
    </div>
    

    这是我的数据。 运行以下xPath查询时:

    //div[@class="title"][1]/a
    

    结果我得到了 全部的

    //div[@class="resultcontainer"][1]/div[@class="info"]/div[@class="title"]/a
    

    我只得到第一个,不是全部。

    这背后有什么神圣的原因吗?

    顺致敬意, 比斯科

    1 回复  |  直到 17 年前
        1
  •  2
  •   Tomalak    17 年前

    我想你想要

    (//div[@class="title"])[1]/a
    

    这:

    //div[@class="title"][1]/a
    

    选择全部( <a> 元素的子元素) <div> 具有 @class 'title' ,他们是父母的第一个孩子(在这种情况下)。这意味着:它选择 是的。

    <部门> 具有 @阶级 “头衔” -其中第一个。

    谓词(方括号中的表达式) [] )应用于与前面位置步骤匹配的每个元素(即。 "//div" ) 个别地

    因此,这:

    //div[1][@class="title"]/a
    

    将选择全部 <部门> 元素,取第一个元素,然后通过检查 @阶级 价值也不是你想要的。;-)