Comment obtenir l'attribut d'ancrage enfant avec HtmlAgilityPack?

c# html-agility-pack

Question

HtmlAgilitiPack et je veux vous demander comment obtenir de la valeur ( je veux obtenir cette valeur ):

De la page 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>

Code C #:

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

J'ai essayé:

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

Mais cela ne fonctionne pas, pouvez-vous m'aider? Je vous remercie.

Réponse acceptée

Vous pouvez utiliser la syntaxe XPATH:

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

Vous pouvez également utiliser 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();

Réponse populaire

Je pense que vous essayez d'obtenir la span du texte, vous devez disposer d' a texte

essaye ça

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi