如何删除文档中某处上方和下方的节点

How to remove nodes above and below somewhere in the document

假设我有一个 HtmlNode 指向 table 的实例,我怎样才能删除它上面和下面的所有节点? 我们可以假设 table 与 html 和正文标签

处于同一级别
<html>
<body>
<p>please remove me</p>

<table>
....
</table>

<p>please remove me</p>
<a> ... </a>
.
<img>...</img>
</body>
</html>

根据您的 HTML 示例(通常是这样),<table><body> 的子级,它们不在同一级别。假设 table 是一个 HtmlNode 类型的变量,指向 <table> 元素,你可以这样做:

var nodes = table.SelectNodes("following-sibling::*[1] | preceding-sibling::*[1]");
foreach (HtmlNode node in nodes)
{
    node.Remove();
}

关于正在使用的 XPath 的简要说明:

  • following-sibling::*[1] : select 直接跟随同级 元素而不考虑元素名称。
  • preceding-sibling::*[1] : select 直接前面的同级 元素而不考虑元素名称。
  • | : XPath 联合运算符组合两个不同的 XPath 表达式