Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何正确使用XPath前置同级?_Html_Xml_Xpath_Nokogiri - Fatal编程技术网

Html 如何正确使用XPath前置同级?

Html 如何正确使用XPath前置同级?,html,xml,xpath,nokogiri,Html,Xml,Xpath,Nokogiri,我在选择以前的兄弟姐妹时遇到困难。以下是html: <div> <h2>Apple</h2> <div class="row">A</div> <h2>Banana</h2> <div class="row">B</div> <h2>Strawberry</h2> <div class="

我在选择以前的兄弟姐妹时遇到困难。以下是html:

<div>
  <h2>Apple</h2>
  <div class="row">A</div>
  <h2>Banana</h2>
  <div class="row">B</div>
  <h2>Strawberry</h2>
  <div class="row">C</div>
</div>

苹果
A.
香蕉
B
草莓的
C
我的XPath:
前面的同级::h2

我要做的是:为每个
div.row
选择最近的前一个
h2
元素

例如,
div.row A
给我
Apple h2
div.row B
给我
香蕉h2
div.row C
给我
草莓h2

问题是我的XPath错误,它只为每个
div.row选择了
Apple h2
我如何解决这个问题?

如果你想选择最接近的前一个同级-只需添加索引
[1]

preceding-sibling::h2[1]
XPath轴包含上下文节点前面的所有同级节点。XPath,
preference sibling::h2
,选择从上下文节点开始的所有
h2
同级元素

因此,如果上下文节点是
C
元素

/div/div[.="C"]/preceding-sibling::h2
挑选

<h2>Apple</h2>
<h2>Banana</h2>
<h2>Strawberry</h2>
选择公正

<h2>Strawberry</h2>
<h2>Apple</h2>
选择公正

<h2>Strawberry</h2>
<h2>Apple</h2>
苹果公司 当然,如果您以编程方式获得上下文节点(而不是通过XPath作为
/div/div[.=“C”]
),并使用
前面的同级节点::h2[1]
前面的同级节点::h2[last()]
相对于宿主语言/框架(nokogiri)中的上下文节点,上述示例也适用。

欢迎您。请选择最有帮助的答案。(可能还想重新访问并接受对的有用答案。)谢谢。