DIV内のリンクを取得する

.net c# html-agility-pack windows-phone-8 xpath

質問

私はこの部門の内部から最初のリンクを得ることができるようにしたい。

    <div id="first-tweet-wrapper">
    <blockquote class="tweet" lang="en">
    <a href="htttp://link.com">                          <--- This one
      text    </a>
  </blockquote>
  <a href="http://link2.net" class="click-tracking" target="_blank"
     data-tracking-category="discover" data-tracking-action="tweet-the-tweet">
    Tweet it!  </a>
</div>

私はこのコードで試しましたが、うまくいきません

    <div id="first-tweet-wrapper">
    <blockquote class="tweet" lang="en">
    <a href="htttp://link.com">                          <--- This one
      text    </a>
  </blockquote>
  <a href="http://link2.net" class="click-tracking" target="_blank"
     data-tracking-category="discover" data-tracking-action="tweet-the-tweet">
    Tweet it!  </a>
</div>

受け入れられた回答

あなたはのhref属性値が取る必要があるアンカー要素を HtmlAgilityPackのGetAttributeValueメソッドを使用して。次のように親ブロックコード要素の内容を直接抽出することで、単一のアンカー要素にアクセスできます。

// div [@ id = 'first-tweet-wrapper'] /ブロッククォート[@ class = 'twitter-tweet']

次に、内部に単一のリンクを取得します。考えられる解決策は次のようになります(この場合、入力はFacebookですが、 Microsoftでもうまくいきます)。

try
{           
    // download the html source
    var webClient = new WebClient();
    var source = webClient.DownloadString(@"https://discover.twitter.com/first-tweet?username=facebook#facebook");
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(source);

    var div = doc.DocumentNode.SelectSingleNode("//div[@id='first-tweet-wrapper']/blockquote[@class='twitter-tweet']");
    if (div != null)
    {
        // there is only one links
        var link = div.Descendants("a").FirstOrDefault();
        if (link != null)
        {
            // take the value of the attribute
            var href = link.GetAttributeValue("href", "");
            Console.WriteLine(href);
        }
    }
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
}

出力はこの場合です:

https://twitter.com/facebook/statuses/936094700

もう一つの可能​​性は、XPath(@ har07 suggestのように)を使ってアンカー要素を直接選択することです。

try
{           
    // download the html source
    var webClient = new WebClient();
    var source = webClient.DownloadString(@"https://discover.twitter.com/first-tweet?username=facebook#facebook");
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(source);

    var div = doc.DocumentNode.SelectSingleNode("//div[@id='first-tweet-wrapper']/blockquote[@class='twitter-tweet']");
    if (div != null)
    {
        // there is only one links
        var link = div.Descendants("a").FirstOrDefault();
        if (link != null)
        {
            // take the value of the attribute
            var href = link.GetAttributeValue("href", "");
            Console.WriteLine(href);
        }
    }
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
}

出力は上記と同じです。


人気のある回答

あなたの<div> idが "firt"の代わりに "first-tweet-wrapper"であると仮定すると、このXPathクエリを使って<a>要素を<blockquote>中に得ることができます:

//div[@id='first-tweet-wrapper']/blockquote/a

だからあなたのコードは次のようになります:

//div[@id='first-tweet-wrapper']/blockquote/a



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ