c# - 如何连接两个 HtmlNodeCollection

标签 c# xpath html-agility-pack

我正在使用HTML Agility Pack在 C# 中,我有两个 HtmlNodeCollection。我可以同时加入这两个元素吗?或者是否有其他方法可以将这两个元素合并到一个 HtmlNodeCollection 中?

一:

HtmlNodeCollection butiks = doc.DocumentNode.SelectNodes("//div[contains(@class,'butik-large-image')]");

两个:

HtmlNodeCollection butiks = doc.DocumentNode.SelectNodes("//div[contains(@class,'butik small left')]");

最佳答案

HtmlNodeCollection继承IList<HtmlNode>它继承IEnumerable<HtmlNode>您可以调用 Enumerable.Concat() extension method创建一个包含两个源的新枚举。请参阅How to concatenate two IEnumerable<T> into a new IEnumerable<T>? .

您也可以通过 using an "or" in your Xpath expression 选择两组节点:

//div[contains(@class,'butik-large-image') or contains(@class,'butik small left')]

请注意此contains()期望按给定顺序给定类。如果您不想这样做,请使用括号和 and :

//div[contains(@class,'butik-large-image') 
or 
( 
    contains(@class,'left') and
    contains(@class,'small') and
    contains(@class,'butik')
)]

参见How can I select an element with multiple classes with Xpath?为了正确实现该and ,如上面的代码将匹配误报,因为它不会将类作为单独的单词进行检查。

关于c# - 如何连接两个 HtmlNodeCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32541356/

相关文章:

c# - CQRS 的事件总线

c# - 为什么无法比较 IntPtr.Zero 和 default(IntPtr)?

python - 找到下一个跨度并打印文本

c# - 解析 HTML 获取键和值

c# - Html Agility Pack SelectSingleNode 在迭代中总是给出相同的结果?

c# - 如何加快 Word Interop 处理速度?

c# - 如何让一个代码运行在所有的aspx页面上?

Xpath:通过父节点的多个属性来定位节点

python - scrapy list return:如何处理/提取列表的每个元素?

c# - 从 javascript 获取带有渲染的 html 的网页源代码