Html Agility Pack、サイトを通して特定の単語列を検索する

c# html-agility-pack

質問

私はこのタスクのために、HTMLのAgility Packを使用しています。基本的に私はURLを持っています。私のプログラムはHTMLページの内容を読み込み、テキスト行を見つけたらリンゴ ")、それはラベルのテキストを「見つけました」に変更する必要があります。

私は含まれているとそれをしようとしたが、私はそれが1つの単語をチェックすると思います。

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

if (nodeBFT != null && nodeBFT.Count != 0)
    myLabel.Text = "Found it";

編集:私のコードの残りは、今、アコの試行で:

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;
        }
    ...

受け入れられた回答

1つの可能なオプションは、使用してい. text()代わりに。 text()contains()関数に渡すことは、検索されたテキストが現在の要素の最初の直接の子である場合にのみ有効です。

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

もう一方の側でcontains(., '...')contains(., '...')は連結された現在の要素のテキスト内容全体を評価します。したがって、上のXPathでは、たとえば次の要素を一致と見なします。

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

単一のテキストノードにキーワード全体が含まれているケースを考慮するだけでXPathが必要であるため、上記のケースを不一致と見なす場合は、次のように試してみてください。

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

上記のいずれにも当てはまらない場合は、キーワードを含む最小限のHTMLスニペットを投稿してください。一致が返されないため、その動作の原因となる可能性のあるものを修正します。


人気のある回答

これを使って:

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow