0

HtmlAgilityPack を使用して、特定の文字列 (私の場合は文字列 '/groups/') を含む href 属性を持つ HTML 'A' ノードを見つけようとしています。

HtmlNodeCollection groups = source.DocumentNode.SelectNodes("//a[contains(@href, '/groups/')]");

ソース コードにはこのようなノードが約 20 個含まれていますが、上記のコードでは何も返されないため、間違っているのではないかと思います。

私がしていることは正しいですか? そうでない場合、特定の文字列を含む値を持つ特定の属性を持つノードを選択するにはどうすればよいですか?

4

1 に答える 1

0

あなたの表現は私としては正しいようです。

ソース ドキュメント (または少なくともその一部) を投稿しません。だから、私は推測します。

問題は、xpath は大文字と小文字を区別しない比較には適していないということです。egまたはを含む属性を持つ<a>タグ がある場合、それは一致しません。これには回避策があります。href/Groups//GROUPS/

//a[contains(translate(@href, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '/groups/')]

StringComparison.OrdinalIgnoreCase別のオプションとして、LINQ を次のように使用できます。

source.DocumentNode.Descendants("a")
    .Where(a => a.GetAttributeValue("href", string.Empty)
                   .IndexOf("/groups/", StringComparison.OrdinalIgnoreCase) != -1
);
于 2013-03-01T08:23:18.237 に答える