如何在XPath中的2个h2标签之间提取几个文本行?

时间:2017-03-08 17:29:15

标签: xpath

我试着在这里到处看,但似乎我无法弄清楚为什么我的输出不起作用。 这是代码:

<h2> Title1 </h2>
"
Text 1"
<br>
"
Text 2"
<br>
"
Text 3
"
<h2> Title2 </h2>

我想提取文本1文本2文本3,但使用以下Xpath,它不起作用...

text()[preceding-sibling::h2[normalize-space()='Title1']]

你能帮我吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

在您的情况下,您可以使用

<div id="list">
  <div class="list-item">A</div>
  <div class="list-item">B</div>
  <div class="list-item">C</div>
  <div class="list-item">D</div>
  <div class="list-item">E</div>
  <div class="list-item">F</div>
  <div class="list-item">G</div>
  <div class="list-item">H</div>
  <div class="list-item">I</div>
  <div class="list-item">J</div>
</div>

但它仅适用于当前提供的//h2[normalize-space(text())="Title1"]/following-sibling::text()[position()<4] 示例:如果可能有更多或更少的HTML部分 - 它将与预期的文字内容不匹配...

答案 1 :(得分:0)

这是一种可能的方式:

//h2[normalize-space() = 'Title1']
 /following-sibling::text()[
    following-sibling::h2[1][normalize-space() = 'Title2']
 ]

<强> demo

简要说明:

  • //h2[normalize-space() = 'Title1'] :查找h1元素,其中whitespaces normalization之后的文字内容等于&#39; Title1&#39;
  • /following-sibling::text() :从这样的h1元素中,找到以下所有兄弟文本节点...
  • following-sibling::h2[1][normalize-space() = 'Title2'] :...其中最近跟随兄弟h2内容等于&#39; Title2&#39;