使用 HtmlAgilityPack 拆分 HTML 字符串
Splitting HTML string with HtmlAgilityPack
我有这样的 html 代码:
<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
// another ClassA ....
<div class="classA">
<blockquote>Some key</blockquote >
</div>
如何删除 Some key
的 outerHTML 或获取 class
以上的所有 html 代码,其中 Some key
带有 Html 敏捷包?
意思是,我要的结果是
<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
// another ClassA ....
看起来你想找到文本 Some key
,然后查看父元素,直到找到带有 class 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。
此时,您已拥有要删除的元素。因此,您可以使用它来查找自己之后的兄弟姐妹并将其删除。
XPATH 是你的朋友。
这个 returns 预期结果只需要一个查询
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
选择给定节点之前的所有节点
我有这样的 html 代码:
<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
// another ClassA ....
<div class="classA">
<blockquote>Some key</blockquote >
</div>
如何删除 Some key
的 outerHTML 或获取 class
以上的所有 html 代码,其中 Some key
带有 Html 敏捷包?
意思是,我要的结果是
<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
// another ClassA ....
看起来你想找到文本 Some key
,然后查看父元素,直到找到带有 class 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。
此时,您已拥有要删除的元素。因此,您可以使用它来查找自己之后的兄弟姐妹并将其删除。
XPATH 是你的朋友。
这个 returns 预期结果只需要一个查询
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
选择给定节点之前的所有节点