J'ai un code HTML et j'ai besoin d'obtenir des nœuds par classe. Donc je ne peux pas le faire parce que
XDocument
), mais doc.Elements()
ne fonctionne que si j'ai un identifiant, mais ce n'est pas le cas. Donc, je ne SelectNodes
pas non plus le chemin XML, donc je ne peux pas utiliser la méthode SelectNodes
mon code était
public static class HapHelper
{
private static HtmlNode GetByAttribute(this IEnumerable<HtmlNode> htmlNodes, string attribute, string value)
{
return htmlNodes.First(d => d.HasAttribute(attribute) && d.Attributes[attribute].ToString() == value);
}
public static HtmlNode GetElemenyByAttribute(this HtmlNode parentNode, string attribute, string value)
{
return GetByAttribute(parentNode.Descendants(), attribute, value);
}
public static bool HasAttribute(this HtmlNode d, string attribute)
{
return d.Attributes.Contains(attribute);
}
public static HtmlNode GetElementByClass(this HtmlNode parentNode, string value)
{
return parentNode.GetElemenyByAttribute("class", value);
}
}
mais cela ne fonctionne pas, car Descendants()
ne renvoie que les nœuds les plus proches.
Que puis-je faire?
Apprenez XPath! :-) C'est très simple et vous servira bien. Dans ce cas, ce que vous voulez c'est:
SelectNodes("//*[@class='" + classValue + "']") ?? Enumerable.Empty<HtmlNode>();