C# 如何使用HTML agility pack和XPath删除节点以清理HTML页面

C# 如何使用HTML agility pack和XPath删除节点以清理HTML页面,c#,xpath,html-parsing,C#,Xpath,Html Parsing,我需要从主要与商业新闻相关的网页中提取文本。 假设HTML页面如下所示 <html> <body> <div> <p> <span>Desired Content - 1</span></p> <p> <span>Desired Content - 2</span></p> <p> <span>De

我需要从主要与商业新闻相关的网页中提取文本。 假设HTML页面如下所示

<html>    
  <body>
    <div>
    <p> <span>Desired Content - 1</span></p>
    <p> <span>Desired Content - 2</span></p>
    <p> <span>Desired Content - 3</span></p>
    </div>
  </body>
</html>"
这里的“searchData”是一个变量,它包含所需内容的样本-1,用于搜索在整个网页正文中包含新闻的节点

我想的是清理网页,只包含HTML、正文、表格、分区和段落等主要标记,而没有跨距和其他格式元素。但是其他一些网站可能只使用span而不是div,所以我不知道如何实现这个要求

基本要求是从不同的网页(近250个不同的网站)中提取新闻内容。所以我不能为每个网页编写特定的代码。我需要一个通用方法


任何想法都值得赞赏。谢谢。

我自己找到了答案

使用while循环直到找到div父级,然后获取innertext是可行的

`{//选择所需的节点,向上移动直到找到一个div,然后获取内部文本

            node = hd.DocumentNode.SelectSingleNode("//*[contains(text(),'" + searchData + "')]"); //Find the desired Node.

            while (node.ParentNode.Name != "div") //Move up till you find a encapsulating Div node.
            {
                node = node.ParentNode;
                Console.WriteLine(node.InnerText);
            }
            Body = node.InnerText;

        }`

此XPath表达式选择最里面的
div
元素,其中
$searchData
变量引用值作为其字符串值的一部分

//div[contains(.,$searchData)]
     [not(.//div[contains(.,$searchData)])] 

使用XSLT可以很容易地做到这一点。请提供一个小XML文档,以及清理过程中需要的结果——然后在接下来的半小时内,许多人会向您展示一个解决方案。:)按照您的建议修改查询。谢谢。请查看我的答案,以获得一个仅使用XPath的解决方案。谢谢,我使用了for循环,直到找到一个div为止。现在,您的救命,这更容易。
//div[contains(.,$searchData)]
     [not(.//div[contains(.,$searchData)])]