Html Agility Pack,在网站上搜索指定的字符串

hun*_*ude 7 c# html-agility-pack

我正在使用Html Agility Pack完成这项任务,基本上我有一个URL,我的程序应该读取它上面的html页面的内容,如果它找到一行文本(即:"John有三个苹果"),它应该将标签的文本更改为"找到它".

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

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

if (nodeBFT != null && nodeBFT.Count != 0)
    myLabel.Text = "Found it";
Run Code Online (Sandbox Code Playgroud)

编辑:我的其余代码,现在与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;
        }
    ...
Run Code Online (Sandbox Code Playgroud)

har*_*r07 9

一种可能的选择是使用.而不是text().传递text()contains()函数的方式你没有意愿,你怀疑,有效的,只有当搜索到的文本是当前元素的第一直接子:

doc.DocumentNode.SelectNodes("//*[contains(., 'John had three apples')]");
Run Code Online (Sandbox Code Playgroud)

在另一方面,contains(., '...')评估当前元素的整个文本内容,连接.所以,只是抬头,上面的XPath也会考虑以下元素作为匹配:

<span>John had <br/>three <strong>apples</strong></span>
Run Code Online (Sandbox Code Playgroud)

如果您需要XPath仅考虑整个关键字包含在单个文本节点中的情况,并因此将上述情况视为不匹配,则可以尝试这种方式:

doc.DocumentNode.SelectNodes("//*[text()[contains(., 'John had three apples')]]");
Run Code Online (Sandbox Code Playgroud)

如果以上都不适合您,请发布包含关键字的最小HTML片段,但不返回任何匹配项,因此我们可以进一步检查可能导致该行为的原因以及解决方法.