【问题标题】:Splitting HTML string with HtmlAgilityPack使用 HtmlAgilityPack 拆分 HTML 字符串
【发布时间】:2020-03-30 18:09:55
【问题描述】:

我有一个这样的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 ....

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      看起来您想找到文本 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。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2019-11-18
        相关资源
        最近更新 更多