XPath select all elements between two specific elements

Same concept as bytebuster, but a different xpath:

/*/p[count(preceding-sibling::divider)=1]

Here is a general XPath expression:

/*/divider[$k]
    /following-sibling::p
       [count(.|/*/divider[$k+1]/preceding-sibling::p)
       =
        count(/*/divider[$k+1]/preceding-sibling::p)
       ]

If you substitute $k with 1 then exactly the wanted p nodes are selected.

if you substitute $k with 2 then all p elements between the 2nd and 3rd divider , ..., etc.

Explanation:

This is a simple application of the Kayessian XPath 1.0 formula for node-set intersection:

$ns1[count(.|$ns2) = count($ns2)]

selects all the nodes that belong both to the nodesets $ns1 and $ns2.

In this specific case we substitute $ns1 with:

/*/divider[$k]/following-sibling::p

and we substitute $ns2 with:

/*/divider[$k+1]/preceding-sibling::p