Html XPath选择两个标题之间的所有元素?

Html XPath选择两个标题之间的所有元素?,html,xml,xpath,Html,Xml,Xpath,但这并不特定于所包含的文本,因此如果页面发生更改,那么xpath可能指向完全不同的内容 我希望sudo代码中的术语是: 给我标题'Headline 1'和 标题'Headline 2'包括'Headline 1' 这是可能的吗?如果尝试类似的方法会怎么样 //*[count(preceding-sibling::hr)=1] 将返回标题下的每个元素。你可以进一步缩小范围 //h2[contains(.,'Headline 1')]//* 对于段落文本,但不包括li元素。此XPath //h2

但这并不特定于所包含的文本,因此如果页面发生更改,那么xpath可能指向完全不同的内容

我希望sudo代码中的术语是:

给我标题
'Headline 1'
和 标题
'Headline 2'
包括
'Headline 1'


这是可能的吗?

如果尝试类似的方法会怎么样

//*[count(preceding-sibling::hr)=1]
将返回标题下的每个元素。你可以进一步缩小范围

//h2[contains(.,'Headline 1')]//*
对于段落文本,但不包括li元素。

此XPath

//h2[contains(.,'Headline 1')]//p
将选择字符串值为
'Headline 1'
'Headline 2'
h2
s之间的所有元素:

//*[    preceding-sibling::h2[. = 'Headline 1'] 
    and following-sibling::h2[. = 'Headline 2']]
还有一种方法:

//h2[. = 'Headline 1'] |
//*[    preceding-sibling::h2[. = 'Headline 1'] 
    and following-sibling::h2[. = 'Headline 2']]
或者,可能是理想的方式:

//*[self::h2[. = 'Headline 1']
    or (    preceding-sibling::h2[. = 'Headline 1'] 
        and following-sibling::h2[. = 'Headline 2']]

因为它避免了两次指定
“Heading 1”

在再次查看了我用于测试的HTML代码后,我现在意识到它位于。你显然是对的,谢谢你指出这一点。
<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>
//h2[. = 'Headline 1'] |
//*[    preceding-sibling::h2[. = 'Headline 1'] 
    and following-sibling::h2[. = 'Headline 2']]
//*[self::h2[. = 'Headline 1']
    or (    preceding-sibling::h2[. = 'Headline 1'] 
        and following-sibling::h2[. = 'Headline 2']]
//h2[. = 'Headline 2']
    /preceding-sibling::*[not(following-sibling::h2[. = 'Heading 1'])]