【发布时间】:2017-05-02 12:03:27
【问题描述】:
我需要从 html 代码(HtmlDocument 或 HtmlNodes 列表)中提取节点对。
问题是我需要选择一个节点(从 List 或 HtmlDocument,没关系,我会选择最佳解决方案)具有类 Attribute 但根本没有值(见图)。
另一个(我认为更好的解决方案)是选择“”节点及其直接的following-sibling::li[1](链接#2),这可能是我将为我的程序的这一部分做的事情。 链接 #2 似乎有点帮助,但我不知道如何以“获取所有节点及其第一个后续兄弟”之类的方式使用它。
我想要两件事: - 一些代码来获得“一个节点的类和它的第一个后续节点”,我还没有使用过 XPathes(或者它被调用)所以我不习惯 - 如果可能,获取“具有类属性但没有值的节点”的方法
问题是,稍后我将不得不选择具有“无价值”类的 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 但我以前从未使用过它(我可以用它来选择“”节点及其紧随其后的节点(不打算使用它,太吓人了)
- select an element next to current element HtmlAgilityPack 我本来打算用这个,但我从来没有用过 xpath 来做 htmldoc(现在研究一下)
图片:
sample code of what I'd like to extract 尝试添加 2 张图片:enter image description here
更新
好的,在 Hung Cao 的帮助下,我能够选择
<li class>
节点。
现在,我想做的是选择“对”节点,更准确地说是一个特定节点及其直接的第一个兄弟节点。我有 :
<li class="A">...</> => 第一对
<li class="B">...</> => 第一对
<li class="A">...</> => 第二对
<li class="B">...</>=> 第二对
我想最终得到一个包含 A/B 类对的集合或数组(实际上,我使用的是一个 C# 类,它基本上是 A 的内容,其中有一个数组,其中我存储 B 类的元素)。
tl;dr:我想要类似
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;
}
【问题讨论】:
标签: c# html-agility-pack