XPath Expression: Выбор элементов между тегами A HREF="expr"

Я не нашел явного способа выбрать все узлы, существующие между двумя якорями ( пара тегов) в HTML файле.

Первый якорь имеет следующий формат:

<a href="file://START..."></a>

Второй якорь:

<a href="file://END..."></a>

Я убедился, что оба можно выбрать с помощью starts-with (обратите внимание, что я использую HTML Agility Pack):

HtmlNode n0 = html.DocumentNode.SelectSingleNode("//a[starts-with(@href,'file://START')]"));
HtmlNode n1 = html.DocumentNode.SelectSingleNode("//a[starts-with(@href,'file://END')]"));

Учитывая это, и мои дилетантские навыки XPath, я написал следующее выражение, чтобы получить все теги между двумя якорями:

html.DocumentNode.SelectNodes("//*[not(following-sibling::a[starts-with(@href,'file://START0')]) and not (preceding-sibling::a[starts-with(@href,'file://END0')])]");

Это, кажется, работает, но выбирает весь HTML документ!

Мне нужно, например, для следующего HTML-фрагмента:

<html>
...

<a href="file://START0"></a>
<p>First nodes</p>
<p>First nodes
    <span>X</span>
</p>
<p>First nodes</p>
<a href="file://END0"></a>

...
</html>

удалить оба якоря, три P (включая, конечно, внутренний SPAN).

Есть ли способ сделать это?

Я не знаю, предлагает ли XPath 2.0 лучшие способы достижения этой цели.

*EDIT (особый случай!) *

Я должен также обработать случай, когда:

"Select tags between X and X', where X is

"

Так что вместо:

<a href="file://START..."></a>
<!-- xhtml to be extracted -->
<a href="file://END..."></a>

Я должен обработать также:

<p>
  <a href="file://START..."></a>
</p>
<!-- xhtml to be extracted -->

<p>
  <a href="file://END..."></a>
</p>

Спасибо большое, еще раз.

5
задан Hernán 4 July 2011 в 03:12
поделиться