基于内容的元素之间 select 元素的 XPath?
XPath to select elements between elements based on content?
给定以下 HTML,什么 XPath 将 select 具有 Mac / Macbooks
锚文本的元素和具有 More
锚文本的元素之间的所有 a
元素文本?
<dd>
<ol>
<li>
<a href="http://www.shophive.com/apple?cat=9">DO NOT WANT 1</a> (164)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=10">Mac / Macbooks</a> (165)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=18">iPhone</a> (459)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=20">iPad</a> (221)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=486">Watch</a> (129)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=16">iPod</a> (85)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=574">More</a> (69)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=575">DO NOT WANT 2</a> (70)
</li>
</ol>
</dd>
Select根据内容,即"More"..
这可能有用吗?未经测试。
//a[.="More"]
根据内容select两个元素之间的元素
使用针对字符串值的测试来识别终点。
//a[.='Mac / Macbooks']
select 是 起始元素。
//a[.='More']
select 是 结束元素 。
使用preceding and following axis到select元素
在其他元素之间。
决定是否应包括或排除端点。
排除的个案:
//a[preceding::a[.='Mac / Macbooks'] and following::a[.='More']]
包含案例(与排除案例一样,但通过 or
添加了端点):
//a[preceding::a[.='Mac / Macbooks'] and following::a[.='More']
or .='Mac / Macbooks'
or .='More']
请注意,XPath 没有 following-or-self
和 preceding-or-self
轴,因此我们明确添加端点。
排除案例的结果是:
<a href="http://www.shophive.com/apple?cat=18">iPhone</a>
<a href="http://www.shophive.com/apple?cat=20">iPad</a>
<a href="http://www.shophive.com/apple?cat=486">Watch</a>
<a href="http://www.shophive.com/apple?cat=16">iPod</a>
包含案例的结果是:
<a href="http://www.shophive.com/apple?cat=10">Mac / Macbooks</a>
<a href="http://www.shophive.com/apple?cat=18">iPhone</a>
<a href="http://www.shophive.com/apple?cat=20">iPad</a>
<a href="http://www.shophive.com/apple?cat=486">Watch</a>
<a href="http://www.shophive.com/apple?cat=16">iPod</a>
<a href="http://www.shophive.com/apple?cat=574">More</a>
请注意,在这两种情况下,返回的结果均按文档顺序排列。
给定以下 HTML,什么 XPath 将 select 具有 Mac / Macbooks
锚文本的元素和具有 More
锚文本的元素之间的所有 a
元素文本?
<dd>
<ol>
<li>
<a href="http://www.shophive.com/apple?cat=9">DO NOT WANT 1</a> (164)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=10">Mac / Macbooks</a> (165)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=18">iPhone</a> (459)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=20">iPad</a> (221)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=486">Watch</a> (129)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=16">iPod</a> (85)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=574">More</a> (69)
</li>
<li>
<a href="http://www.shophive.com/apple?cat=575">DO NOT WANT 2</a> (70)
</li>
</ol>
</dd>
Select根据内容,即"More"..
这可能有用吗?未经测试。
//a[.="More"]
根据内容select两个元素之间的元素
使用针对字符串值的测试来识别终点。
//a[.='Mac / Macbooks']
select 是 起始元素。//a[.='More']
select 是 结束元素 。
使用preceding and following axis到select元素 在其他元素之间。
决定是否应包括或排除端点。
排除的个案:
//a[preceding::a[.='Mac / Macbooks'] and following::a[.='More']]
包含案例(与排除案例一样,但通过
or
添加了端点)://a[preceding::a[.='Mac / Macbooks'] and following::a[.='More'] or .='Mac / Macbooks' or .='More']
请注意,XPath 没有
following-or-self
和preceding-or-self
轴,因此我们明确添加端点。排除案例的结果是:
<a href="http://www.shophive.com/apple?cat=18">iPhone</a> <a href="http://www.shophive.com/apple?cat=20">iPad</a> <a href="http://www.shophive.com/apple?cat=486">Watch</a> <a href="http://www.shophive.com/apple?cat=16">iPod</a>
包含案例的结果是:
<a href="http://www.shophive.com/apple?cat=10">Mac / Macbooks</a> <a href="http://www.shophive.com/apple?cat=18">iPhone</a> <a href="http://www.shophive.com/apple?cat=20">iPad</a> <a href="http://www.shophive.com/apple?cat=486">Watch</a> <a href="http://www.shophive.com/apple?cat=16">iPod</a> <a href="http://www.shophive.com/apple?cat=574">More</a>
请注意,在这两种情况下,返回的结果均按文档顺序排列。