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)
一种可能的选择是使用.而不是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片段,但不返回任何匹配项,因此我们可以进一步检查可能导致该行为的原因以及解决方法.