HtmlAgilityPack utilisant Linq pour la plate-forme Windows Phone 8.1

c# html-agility-pack linq windows-phone-8.1

Question

HtmlAgilityPack n'étant pas encore pris en charge par Windows Phone 8.1, la référence manuelle dans le projet était une solution astucieuse. Mais ce n'est pas le seul problème. Je pourrais utiliser XPath pour mon projet précédent pour sélectionner des nœuds. Maintenant, je peux voir que la fonction HtmlDocumentNode.SelectNode() n’est plus (en raison de la compatibilité de la version).

ce que j'ai utilisé dans mon projet précédent était semblable à celui-ci

HtmlNode parent = document.DocumentNode.SelectSingleNode("//ul[@class='songs-list1']");
HtmlNodeCollection x = parent.ChildNodes;

J'ai cherché sur stackoverflow et google et ai eu une idée qu'il est toujours possible de sélectionner des nœuds en utilisant Linq.

Je cherche un bloc de code qui fonctionnera comme SelectNodes , SelectNode .

Charger le HtmlDocument manière asynchrone serait apprécié.

Réponse acceptée

Si vous vouliez traduire votre code actuel en utilisant XPath comme utilisant LINQ, alors ceci fera:

HtmlNode parent = document.DocumentNode
                          .Descendants("ul")
                          .FirstOrDefault(o => o.GetAttributeValue("class", "") 
                                                   == "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;

Mais si vous vous attendez à trouver des méthodes qui acceptent XPath dans la version HtmlAgilityPack pour Windows Phone 8.1 des applications universelles ou Windows RT ( « Je suis en quête d'un bloc de code qui fonctionnera comme SelectNodes , SelectNode »), tu ferais mieux de ne pas: HtmlAgilityPack & Windows 8 Metro Apps (réponse de l'auteur de HAP).


Réponse populaire

Vous pouvez le faire en utilisant la méthode Element / s:

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlString);
        var h6Nodes = from h6element in doc.DocumentNode.Element("body").Element("center").Elements("h6")
                      where h6element.Attributes["class"].Value.Equals("songs-list")                      
                      select h6element;

Ceci en supposant que vous ayez quelque chose comme

string htmlString = @"<html>
<body>
<center>
<h6>Hello  </h6>
<h6>World!   </h6>
<h6 class=""songs-list"">
Insert that one song here
</h6>
</center>
</body>
</html>"

et cela obtiendra le noeud <h6> avec la liste de chansons de la classe.




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