【发布时间】:2017-12-16 18:14:25
【问题描述】:
我怎样才能让所有元素都跟随一次,比如:
<div id="exemple">
<h2 class="target">foo</h2>
<p>bla bla</p>
<ul>
<li>bar1</li>
<li>bar2</li>
<li>bar3</li>
</ul>
<h4>baz</h4>
<ul>
<li>lot</li>
</ul>
<div>of</div>
<p>possible</p>
<p>tags</p>
<a href="#">after</a>
</div>
我需要检测<h2 class="target">并将所有标签获取到下一个<h4>并忽略<h4>AND所有以下标签(如果<h4>不存在,我必须获取所有标签到父母的结尾[这里:<div>])
内容是动态的和不可预测的 唯一的规则是:我们知道有一个目标并且有一个(或元素结尾)。我需要获取两者之间的所有标签并排除所有其他标签。
通过这个例子,我需要获得以下 HTML:
<h2 class="target">foo</h2>
<p>bla bla</p>
<ul>
<li>bar1</li>
<li>bar2</li>
<li>bar3</li>
</ul>
所以我可以得到:target = page.at('#exemple .target')
我知道next_sibling方法,但是如何测试当前节点的tag类型呢?
我想用类似的方法来处理节点树:
html = ''
while not target.is_a? 'h4'
html << target.inner_html
target = target.next_sibling
我该怎么做?
【问题讨论】:
-
这更像是一个xpath 或css-selectors 的问题,而不是关于机械化的问题。如果你添加了这些,你会得到更多的观众。
标签: ruby xpath css-selectors nokogiri mechanize-ruby