期待通りのchildNodesをない選択HtmlAgilityPack
-
21-08-2019 - |
質問
私は、ページ内のいくつかのリンクを解析するHtmlAgilityPackライブラリを使用しようとしていますが、私はメソッドに期待する結果を見ていないです。以下では、私は、リンクのHtmlNodeCollectionを持っています。各リンクのために私はイメージノードが存在するかどうかをチェックして、そのattriburesを解析したいがlinkNodeのSELECTNODESとSELECTSINGLENODE方法が与えるもの親文書linkNodeのではないのchildNodesを検索するために?
そうですHtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");
foreach(HtmlNode linkNode in linkNodes)
{
string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
if (linkTitle == string.Empty)
{
HtmlNode imageNode = linkNode.SelectSingleNode("/img[@alt]");
}
}
が存在する場合、私はlinkNodeの画像子ノードのalt属性を得ることができる他の方法はありますか?
解決
それはあなたが文書のルートで開始することを意味して
あなたは「[@alt] / IMG」からforwardslashプレフィックスを削除する必要があります。
HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");
他のヒント
XPathクエリを使用すると、また使用することができます「」検索を示すためには、現在のノードで開始する必要があります。
HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");
また、ヌルチェックに気をつけろ。 SELECTNODESは空白のコレクションの代わりにnullを返します。
HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");
**if(linkNodes!=null)**
{
foreach(HtmlNode linkNode in linkNodes)
{
string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
if (linkTitle == string.Empty)
{
**HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");**
}
}
}
所属していません StackOverflow