У меня есть 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 я хочу распечатать информацию между каждым из этих наборов тегов, которые разделены моим собственным разделителем <hr noshade>
. Таким образом, первый блок должен печатать информацию между всеми "p" тегами, которые лежат между двумя hr noshade
тегами и так далее.
Я использую принятый ответ на 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]
для элементов между <hr noshade>
2 и 3 и т.д.
Что выбирают эти выражения:
<hr noshade>
, заданные его положением N<hr noshade>
предыдущих братьев и сестер, то есть располагаются в N-й группе<hr noshade>
самими Поскольку он выберет несколько элементов между 2 <hr noshade>
, вам, возможно, придется зацикливать результаты и извлечь данные для каждого элемента sibling.
Кто-нибудь на более общем решении?