使用HtmlAgilityPack拆分HTML字符串



我有一个html代码,如下所示:

<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
// another ClassA ....
<div class="classA">
<blockquote>Some key</blockquote >
</div>

如何删除Some key的outerHTML,或者使用html敏捷包获取class以上所有具有Some key的html代码?

意思是,我想要的结果是

<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
// another ClassA ....

XPATH是您的朋友。

这只返回一个查询的预期结果

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes(
"//blockquote[text()='Some key']/parent::*/preceding::*"))
Console.WriteLine(node.OuterHtml);

其中

  • //blockquote[text()='Some key']选择具有所需键的元素。如果它应该在<div class="classA">内,则使用//div[@class='classA']/blockquote[text()='Some key']的更精确的路径表达式
  • parent选择父元素,即<div class="classA">
  • preceding选择给定节点之前的所有节点

演示:https://dotnetfiddle.net/BlQ3w9

看起来您想找到文本Some key,然后查看父级,直到找到具有类classA的元素,然后在DOM中删除该元素>。

您可以通过元素的内部文本找到它:https://html-agility-pack.net/knowledge-base/14288183/find-the-parent-div-of-a-specific-text-in-a-htmldocument

然后,您可能希望循环父节点,直到null或找到ParentNode。HasClass('classA'(。您也可以在Ancestors((上使用Linq。

此时,您就有了要删除的元素。因此,您可以使用它在自身之后查找兄弟姐妹并将其删除。

最新更新