HtmlAgilityPackで子アンカーの属性を取得するには?

c# html-agility-pack

質問

私はHtmlAgilitiPackを勉強していHtmlAgilitiPack私はあなたに尋ねたい、価値を得る方法( 私はこの価値を得たい ):

HTMLページから:

<div id="js_citySelectContainer" class="select_container city_select shorten_text replaced"> 
<span class="dropDownButton ownCity coords">
<a>i want get this value</a>
</span>
</div>

C#コード:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
Console.writeln(echo i want get this value);

私は試した:

doc.DocumentNode.Descendants("span").Where(s => s.GetAttributeValue("class", "") == "dropDownButton ownCity coords").First().InnerText;

しかし、それは動作しません、あなたは私を助けることができますか?ありがとうございました。

受け入れられた回答

XPATH構文を使用することができます:

var span = doc.DocumentNode.SelectSingleNode("//span[@class='dropDownButton ownCity coords']");
var anchorText = span.ChildNodes["a"].InnerText;

LINQを使用することもできます。

var anchorTexts = 
    from span in doc.DocumentNode.Descendants("span")
    where span.GetAttributeValue("class", "") == "dropDownButton ownCity coords" 
    from anchor in span.Descendants("a") 
    select anchor.InnerText;
string anchorText = anchorTexts.FirstOrDefault();

人気のある回答

私は、あなたが取得しようとしていると思いspanテキストを、必要なテキストをa

これを試して

doc.DocumentNode.Descendants("span")
.Where(s => s.GetAttributeValue("class", "") == "dropDownButton ownCity coords")
.First().Descendants("a").First().InnerText;


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