各ノードのhref要素と属性を取得する方法は?

c# href html html-agility-pack

質問

私は、htmlを読んで、値にマッチするすべてのノードを見つけて、配置されたノードの要素と属性を見つけるプロジェクトを進めています。私はどのようにhrefの属性と要素を取得するかを理解するのが難しいです。

私はHTMLAgilityPackを使用しています。私には数多くのノードがあります

class = "middle"

html全体を通して。私はそれらのすべてを取得する必要があり、それらからhref要素と属性を取得します。以下はhtmlのサンプルです:

<div class="top">
        <div class="left">            
                <a href="item123">
                    <img src="url.png" border="0" />
                                    </a>
            </div>
        </div>
<div class="middle">
            <div class="title"><a href="item123">Captains Hat</a></div>

                            <div class="day">monday</div>

            <div class="city">Tuscon, AZ | 100 Days | <script typs="text/javascript">document.write(ts_to_age_min(1445620427));</script></div>

</div>

私は必要な他の属性を得ることができましたが、 'href'ではできません。私が持っているコードはここにあります:

List<string> listResults = new List<string>();         
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(url);                      

//get each listing                       
foreach (HtmlNode node in doc.DocumentNode.Descendants("div").Where(d =>
                d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("middle")))
            {                
string day = node.SelectSingleNode(".//*[contains(@class,'day')]").InnerHtml; 
string city = node.SelectSingleNode(".//*[contains(@class,'city')]").InnerHtml;
string item = node.SelectSingleNode("//a").Attributes["href"].Value;

listResults.Add(day + EnvironmentNewline 
+ city + EnvironmentNewline 
+ item + EnvironmentNewline + EnvironmentNewline)
}

上の私のコードは、しかし、私は全体のhtmlのページの最初のhrefの値を与えて、何らかの理由で(メッセージボックスにリストを出力することによって可視)各ノードのためにそれを与えています。 SelectSingleNodeを使用すると、その特定のノードの最初のhref属性が取得されるはずです。もしそうなら、なぜHTMLページ全体の最初のhref属性が読み込まれますか?

HTLMAgilityPackでhref値を取得する方法については、ここで多くのスレッドを調べていますが、これを動作させることはできませんでした。

クラス属性(class = "middle")に基づいて選択している各ノードのhref属性と要素を取得するにはどうすればよいですか?

受け入れられた回答

交換してみてください

 string item = node.SelectSingleNode("//a").Attributes["href"].Value;

〜と

 string item = node.SelectSingleNode(".//a").Attributes["href"].Value;

上記以外のコードは、私のために動作します。

あるいは:

string item = node.SelectSingleNode(".//*[contains(@class,'title')]")
              .Descendants("a").FirstOrDefault().Attributes["href"].Value; 



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