Ich habe ein HTML, und ich muss einige Knoten nach Klasse erhalten. Also kann ich es nicht tun, weil
XDocument
erlaubt), aber doc.Elements()
funktioniert nur, wenn ich eine doc.Elements()
habe, aber ich habe nicht. Also ignoriere ich auch den XML-Pfad, so dass ich die SelectNodes
Methode nicht verwenden SelectNodes
Mein Code war
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);
}
}
aber es funktioniert nicht, da Descendants()
nur die nächsten Knoten zurückgibt.
Was kann ich tun?
Lerne XPath! :-) Es ist wirklich einfach und wird dir gut dienen. In diesem Fall ist das, was Sie wollen:
SelectNodes("//*[@class='" + classValue + "']") ?? Enumerable.Empty<HtmlNode>();