HtmlAgilityPack:クラスごとにすべての要素を取得する

.net asp.net c# html-agility-pack regex

質問

私はHTMLを持っており、クラスごとにいくつかのノードを取得する必要があります。だから私はそれをすることができない

  1. 私はXMLパスを使わない
  2. 必要なアイテムにIDはなく、クラスのみ
  3. HtmlAgilityPackは、(のようなすべての要素を取得することはできませんXDocumentできます)が、 doc.Elements()私はIDを持っている場合にのみ動作しますが、私はそうではありません。だから私はまた、私はSelectNodesメソッドを使用することはできませんXMLパスを駄目です
  4. 私は正規表現を使用することはできません

私のコードは

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);
    }
}

Descendants()は最も近いノードのみを返すため、動作しません。

私に何ができる?

受け入れられた回答

XPathを学ぶ! :-)それは本当にシンプルで、あなたにうまく役立つでしょう。この場合、必要なものは次のとおりです。

SelectNodes("//*[@class='" + classValue + "']") ?? Enumerable.Empty<HtmlNode>();



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