I'm confused about what must be something basic, and previous questions (and the documentation) don't really help.

Say we have these 6 siblings: 

```
<a_tag>... a1 ...</a_tag>
<b_tag>... b1 ...</b_tag>
<a_tag>... a2 ...</a_tag>
<b_tag>... b2 ...</b_tag>
<a_tag>... a3 ...</a_tag>
<b_tag>... b3 ...</b_tag>

```

Some xpath expressions work as I expect. For example, `//a_tag` selects all 3 `a_tags`; `//a_tag[2]` selects only `a2`. 

Using `//a_tag[following-sibling::b_tag]` selects, again, all 3 `a_tags`. 

Getting a little fancier, `//a_tag[following-sibling::b_tag[2]]` correctly selects `a1` and `a2`. However, using `//a_tag[following-sibling::b_tag[3]]`, selects only `a1`, while I expected it to select all 3 `a_tags` (because they are all followed by `b_tag[3]`.

And then `//a_tag[preceding-sibling::b_tag[1]][following-sibling::b_tag[2]]` selects `a2`, as expected, but `//a_tag[preceding-sibling::b_tag[2]][following-sibling::b_tag[3]]`, which I expected to select `a3` comes up empty.

If you throw at it something which I would expect to select nothing, like `//a_tag[preceding-sibling::b_tag[2]][following-sibling::b_tag[1]]`, selects `a3` instead.

There are more like these, but I believe the problem is clear enough. Any light thrown on this would be appreciated.