C# Html敏捷包,在站点中搜索指定的字符串

C# Html敏捷包,在站点中搜索指定的字符串,c#,html-agility-pack,C#,Html Agility Pack,我正在使用Html敏捷包来完成这项任务,基本上我有一个URL,我的程序应该读取Html页面的内容,如果它找到一行文本(例如:“John有三个苹果”),它应该将标签的文本更改为“Found it” 我试着用contains来做,但我猜它只检查一个单词 var nodeBFT = doc.DocumentNode.SelectNodes("//*[contains(text(), 'John had three apples')]"); if (nodeBFT != null &&

我正在使用Html敏捷包来完成这项任务,基本上我有一个URL,我的程序应该读取Html页面的内容,如果它找到一行文本(例如:“John有三个苹果”),它应该将标签的文本更改为“Found it”

我试着用contains来做,但我猜它只检查一个单词

var nodeBFT = doc.DocumentNode.SelectNodes("//*[contains(text(), 'John had three apples')]");

if (nodeBFT != null && nodeBFT.Count != 0)
    myLabel.Text = "Found it";
编辑:我代码的其余部分,现在由ako尝试:

if (CheckIfValidUrl(v)) // foreach var v in a list..., checks if the URL works
{
    HtmlWeb hw = new HtmlWeb();
    HtmlDocument doc = hw.Load(v);

    try
    {
        if (doc.DocumentNode.InnerHtml.ToString().Contains("string of words"))
        {
            mylabel.Text = v;
        }
    ...
使用以下命令:

if (doc.DocumentNode.InnerHtml.ToString().Contains("John had three apples"))
    myLabel.Text="Found it";

一种可能的选择是使用
而不是
text()
。将
text()
传递到
contains()
函数的方式,正如您所怀疑的那样,仅当搜索的文本是当前元素的第一个直接子元素时才有效:

doc.DocumentNode.SelectNodes("//*[contains(., 'John had three apples')]");
另一方面,
包含(,“…”)
计算当前元素的整个文本内容,并连接起来。所以,只需一个抬头,上面的XPath也会考虑下面的元素,例如,匹配:

<span>John had <br/>three <strong>apples</strong></span>

如果以上任何一项都不适用于您,请发布包含关键字但未返回匹配项的最小HTML代码段,以便我们进一步检查可能导致该行为的原因以及如何修复该行为。

我似乎也有同样的问题,它只适用于一个单词。这是一个布尔值,非常错误,但我将发布我的其余代码,如果有帮助的话。我不能发布HTML页面,因为它是一个“客户端”,但我不认为这是必要的。问题是内容页面……来吧,我们可以谈谈
doc.DocumentNode.SelectNodes("//*[text()[contains(., 'John had three apples')]]");