質問

私は、ページ内のいくつかのリンクを解析する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]");**   
     }
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top