2009-08-10 4 views
1

に設定されても、すべての要素を選択する今日私は非常に興味深いケース(少なくとも私のために)を見つけました。私はセレンとXPathをいじり、いくつかの要素を取得しようとしましたが、奇妙な行動だています:これは私のデータであるxPath奇妙な動作 - [1]が

<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 

を、私は結果として取得ALLの代わりに、最初のものだけ。しかし、私が照会した場合:

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

私はすべてではなく、最初のものです。

背後には神聖な理由がありますか?

敬具、 bisko

答えて

2

私はあなたが

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

はこれ欲しいと思う:

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

はすべて(の子である<a>要素)の@classを持って<div>要素を選択'title'、これは両親の最初の子供です(この文脈ではt)。つまり、すべてを選択します。

@classがのすべての<div>要素を選択し、最初のものを選択します。

述語(角括弧[]で表現)は個々に先行する位置ステップ(すなわち"//div"に一致各要素に適用されます。述語をフィルタリングされたノードセットに適用するには、グループを括弧で囲む必要があります。

したがって、この:

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

は、すべての<div>の要素を選択するには、最初の1を取り、その後、@class値をチェックすることにより、futherそれを絞り込むでしょう。また、あなたが望むものではありません。 ;-)

+0

私は感謝していません。 – bisko