首页 文章

Html Agility Pack - 使用“空”类提取节点属性或选择节点的PAIR(一个及其紧随的节点)

提问于
浏览
4

我需要从html代码(HtmlDocument或HtmlNodes列表)中提取节点对 .

问题是我需要选择一个节点(来自List或HtmlDocument,无论我选择最佳解决方案)都有一个类属性但根本没有值(见图片) .

另一个(更好的解决方案,我认为)将选择“”节点及其紧随其后的兄弟:: li [1](链接#2),这可能是我将为我的程序的这一部分做的 . 链接#2似乎有点帮助,但我不知道如何以“获取所有节点及其第一个后续兄弟”的方式使用它 .

我想要两件事: - 一些代码来获得“一个节点和一个节点的第一个节点”,我没有使用过XPathes(或者它被称为),所以我不习惯 - 如果它是可能的,一种获得“具有类属性但没有值”的节点的方法

问题是,我将不得不选择带有“无 Value ”类的HtmlNode,我正在寻找一种方法来实现它 . 这个想法(如果它仍然不够清楚)将是这样的:

var r = htmlDoc.DocumentNode.Descendants("li").Where(d => d.Attributes["class"].Value.Equals(NULL)); //I’m not sure about the [enter image description here][1].Value.Equals() ^^’

链接: - How to get next 2 nodes in HTML + HTMLAgilitypack但我以前从未使用过这个(我可以用它来选择“”节点及其紧随其后的节目(不会使用它,太幽灵了)

图片:

sample code of what I'd like to extract试图添加2张图片:enter image description here

更新

好的,在洪曹的帮助下,我能够选择

<li class>

节点 .

现在,我想做什么(它非常清楚,甚至对我来说^^所以我将尝试使用一个特定的例子),是选择节点的更多节点,更确切地说是一个特定节点及其直接的第一个兄弟节点 . 我有: <li class="A">...</> =>第一对 <li class="B">...</> =>第一对 <li class="A">...</> =>第二对 <li class="B">...</> =>第二对

我想最终得到像包含A / B类对的Collection或Array(实际上,我使用的是ac#class,它基本上是A的内容,并且在其中有一个数组,我存储了B类的元素) .

tl;博士:我想要的东西是 public List<Pair> ExtractPairs(HtmlAgilityPack.HtmlDocument htmlDoc){

List<Pair> pairs = new List<>();

foreach (HtmlNode node in htmlDoc.DocumentNode.SelectNodes("//li[@class='A']")) {

Pair pair = new Pair(node,node 这里的第一个兄弟姐妹(这将永远是 <li class="B">);

pairs.add(pair);


}

return pairs;
}

1 回答

  • 2

    TBH,我不太明白你的问题但这是我试图回答它 .

    一些代码来获得“一个节点和一个节点的第一个节点”,我还没有使用XPathes(或者它被称为),所以我不习惯 -

    public static bool HasClass(this HtmlNode node, params string[] classValueArray)
    {
        var classValue = node.GetAttributeValue("class", "");
        var classValues = classValue.Split(' ');
        return classValueArray.All(c => classValues.Contains(c));
    }
    doc.DocumentNode.Descendants("li").FirstOrDefault(_ => _.HasClass("classname")).NextSibling;
    

    如果可能的话,获得“具有类属性但没有值”的节点的方法

    doc.DocumentNode.Descendants("li").Where(_ => string.IsNullOrEmpty(_.GetAttributeValue("class", "")))
    

相关问题