This XPath,
//*[ preceding-sibling::h2[. = 'Headline 1']
and following-sibling::h2[. = 'Headline 2']]
will select all elements between h2
s with string values of 'Headline 1'
and 'Headline 2'
:
<p>some text</p>
<p>some more text</p>
<ul>
<li>list item 1</li>
<li>list item 2</li>
</ul>
<p>more text</p>
Andersson points out in the comments that OP wants the first h2
included in the selection.
Andersson's initial thought would work:
//h2[. = 'Headline 1'] |
//*[ preceding-sibling::h2[. = 'Headline 1']
and following-sibling::h2[. = 'Headline 2']]
Here's another way:
//*[self::h2[. = 'Headline 1']
or ( preceding-sibling::h2[. = 'Headline 1']
and following-sibling::h2[. = 'Headline 2']]
Or, probably the ideal way:
//h2[. = 'Headline 2']
/preceding-sibling::*[not(following-sibling::h2[. = 'Heading 1'])]
because it avoids having to specify 'Heading 1'
twice.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…