0

我有一些 HTML:

<hr noshade>
<p><a href="#1">Some text here</a></p>
<p style="margin-top:0pt;margin-bottom:0pt;line-height:120%;"><span style="color:#000000;font-weight:bold;">This is some description</span></p>
<hr noshade> <!-- so <hr noshade> is the delimiter for me -->
<p><a href="#2">Some more text here</a></p>
<p style="margin-top:0pt;margin-bottom:0pt;line-height:120%;"><span style="color:#000000;font-weight:bold;">This is description for some more text</span></p>
<hr noshade>

在使用 nokogiri 进行解析时,我想在由我自己的 delimiter 分隔的每组标签之间打印信息<hr noshade>。因此,第一个块应该打印位于两个hr noshade标签之间的所有“p”标签之间的信息,依此类推。

4

1 回答 1

1

我在XPath 上使用接受的答案选择两个特定元素之间的所有元素

我只有一个半满意的解决方案

您可以使用此 XPath 表达式:

.//hr[1][@noshade]
  /following-sibling::*[not(self::hr[@noshade])]
                       [count(preceding-sibling::hr[@noshade])=1]

<hr noshade>对于1 到 2之间的第一组 ,

然后,

.//hr[2][@noshade]
  /following-sibling::*[not(self::hr[@noshade])]
                       [count(preceding-sibling::hr[@noshade])=2]

对于 2 到 3 之间的元素 <hr noshade>,等等。

这些表达式选择的内容:

  1. 的所有兄弟姐妹,<hr noshade>由其位置 N 指定
  2. 只有 N<hr noshade>个先前的兄弟姐妹,即位于第 N 组
  3. 那不是<hr noshade>他们自己

由于它将选择 2 之间的几个元素<hr noshade>,您可能必须循环结果并为每个兄弟元素提取数据。

有人在更通用的解决方案上吗?

于 2013-09-24T17:46:53.963 回答