我没有找到一种明确的方法来选择HTML文件中两个锚点(<a></a>
标签对)之间存在的所有节点。
第一个锚点的格式如下:
<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是否提供更好的方法来实现这一点。
*编辑(特殊情况!)*
我还应该处理以下情况:
“选择X和X'之间的标签,其中X是<p><a href="file://..."></a></p>
”
所以不是:
<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>
非常感谢,再次致谢。